Skip to content

Commit 8868548

Browse files
author
skarpenko
committed
Renamed feign-reactor-webclient to feign-reactor-webclient-netty
Added HTTP2 support for Netty client
1 parent 114a56c commit 8868548

File tree

62 files changed

+423
-146
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+423
-146
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ version: 2 # use CircleCI 2.0
66
jobs: # a collection of steps
77
build:
88
environment:
9-
# Configure the JVMto avoid OOM errors
9+
# Configure the JVM to avoid OOM errors
1010
_JAVA_OPTIONS: "-Xmx3g"
1111
docker: # run the steps with Docker
1212
- image: circleci/openjdk:17.0.1-jdk-buster

feign-reactor-benchmarks/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
<dependency>
3434
<groupId>com.playtika.reactivefeign</groupId>
35-
<artifactId>feign-reactor-webclient</artifactId>
35+
<artifactId>feign-reactor-webclient-netty</artifactId>
3636
</dependency>
3737

3838
<dependency>

feign-reactor-benchmarks/src/main/java/reactivefeign/benchmarks/RealRequestBenchmarks.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import reactivefeign.java11.Java11ReactiveOptions;
2525
import reactivefeign.jetty.JettyReactiveFeign;
2626
import reactivefeign.jetty.JettyReactiveOptions;
27-
import reactivefeign.webclient.WebReactiveFeign;
27+
import reactivefeign.webclient.netty.NettyWebReactiveFeign;
2828
import reactor.core.publisher.Mono;
2929

3030
import java.io.IOException;
@@ -86,7 +86,7 @@ protected void setup() throws Exception {
8686

8787
webClient = WebClient.create();
8888

89-
webClientFeign = WebReactiveFeign.<FeignReactorTestInterface>builder()
89+
webClientFeign = NettyWebReactiveFeign.<FeignReactorTestInterface>builder()
9090
.target(FeignReactorTestInterface.class, SERVER_URL);
9191

9292
jettyHttpClient = new HttpClient();

feign-reactor-bom/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
</dependency>
5959
<dependency>
6060
<groupId>com.playtika.reactivefeign</groupId>
61-
<artifactId>feign-reactor-webclient</artifactId>
61+
<artifactId>feign-reactor-webclient-netty</artifactId>
6262
<version>${project.version}</version>
6363
</dependency>
6464
<dependency>

feign-reactor-cloud/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<!-- Tests -->
3838
<dependency>
3939
<groupId>com.playtika.reactivefeign</groupId>
40-
<artifactId>feign-reactor-webclient</artifactId>
40+
<artifactId>feign-reactor-webclient-netty</artifactId>
4141
<scope>test</scope>
4242
</dependency>
4343
<dependency>

feign-reactor-cloud/src/test/java/reactivefeign/cloud2/BuilderUtils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JConfigBuilder;
55
import org.springframework.cloud.client.circuitbreaker.ConfigBuilder;
66
import org.springframework.cloud.client.circuitbreaker.ReactiveCircuitBreakerFactory;
7-
import reactivefeign.webclient.WebReactiveFeign;
7+
import reactivefeign.webclient.netty.NettyWebReactiveFeign;
88

99
import java.time.Duration;
1010
import java.util.concurrent.atomic.AtomicInteger;
@@ -16,7 +16,7 @@ public class BuilderUtils {
1616
private static final AtomicInteger uniqueCircuitBreakerCounter = new AtomicInteger();
1717

1818
static <T> CloudReactiveFeign.Builder<T> cloudBuilder(){
19-
return CloudReactiveFeign.<T>builder(WebReactiveFeign.builder());
19+
return CloudReactiveFeign.<T>builder(NettyWebReactiveFeign.builder());
2020
}
2121

2222
static <T> CloudReactiveFeign.Builder<T> cloudBuilder(ReactiveCircuitBreakerFactory circuitBreakerFactory){
@@ -38,7 +38,7 @@ static <T> CloudReactiveFeign.Builder<T> cloudBuilderWithUniqueCircuitBreaker(
3838
Consumer<ConfigBuilder> customizer,
3939
AtomicReference<String> lastCircuitBreakerId) {
4040
int uniqueId = uniqueCircuitBreakerCounter.incrementAndGet();
41-
return CloudReactiveFeign.<T>builder(WebReactiveFeign.builder())
41+
return CloudReactiveFeign.<T>builder(NettyWebReactiveFeign.builder())
4242
.enableCircuitBreaker(circuitBreakerId -> {
4343
String uniqueCircuitBreakerId = circuitBreakerId + "."+uniqueId;
4444
if(lastCircuitBreakerId != null) {

feign-reactor-cloud/src/test/java/reactivefeign/cloud2/MetricsTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,21 @@
1919
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
2020
import reactivefeign.ReactiveFeignBuilder;
2121
import reactivefeign.testcase.IcecreamServiceApi;
22-
import reactivefeign.webclient.WebReactiveOptions;
22+
import reactivefeign.webclient.netty.NettyReactiveOptions;
2323

2424
/**
2525
* @author Sergii Karpenko
2626
*/
2727
public class MetricsTest extends reactivefeign.MetricsTest {
2828

29-
private static String serviceName = "MetricsTest-loadBalancingDefaultPolicyRoundRobin";
29+
private static final String serviceName = "MetricsTest-loadBalancingDefaultPolicyRoundRobin";
3030

31-
private static ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerFactory;
31+
private static ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerFactory;
3232

33-
@BeforeClass
34-
public static void setupServersList() {
35-
loadBalancerFactory = LoadBalancingReactiveHttpClientTest.loadBalancerFactory(serviceName, wireMockRule.port());
36-
}
33+
@BeforeClass
34+
public static void setupServersList() {
35+
loadBalancerFactory = LoadBalancingReactiveHttpClientTest.loadBalancerFactory(serviceName, wireMockRule.port());
36+
}
3737

3838
@Override
3939
protected String getHost() {
@@ -55,7 +55,7 @@ protected Target<IcecreamServiceApi> target(){
5555
protected ReactiveFeignBuilder<IcecreamServiceApi> builder(long readTimeoutInMillis) {
5656
return BuilderUtils.<IcecreamServiceApi>cloudBuilder()
5757
.enableLoadBalancer(loadBalancerFactory)
58-
.options(new WebReactiveOptions.Builder().setReadTimeoutMillis(readTimeoutInMillis).build()
58+
.options(new NettyReactiveOptions.Builder().setReadTimeoutMillis(readTimeoutInMillis).build()
5959
);
6060
}
6161

feign-reactor-core/src/test/java/reactivefeign/ReactivityTest.java

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@
1515

1616
import com.fasterxml.jackson.core.JsonProcessingException;
1717
import org.junit.AfterClass;
18-
import org.junit.BeforeClass;
18+
import org.junit.Before;
1919
import org.junit.Test;
2020
import reactivefeign.testcase.IcecreamServiceApi;
2121
import reactivefeign.testcase.domain.OrderGenerator;
2222
import reactor.core.publisher.Mono;
2323
import reactor.netty.DisposableServer;
24+
import reactor.netty.http.HttpProtocol;
2425
import reactor.netty.http.server.HttpServer;
2526

2627
import java.time.Duration;
@@ -29,7 +30,6 @@
2930

3031
import static org.awaitility.Awaitility.waitAtMost;
3132
import static org.hamcrest.CoreMatchers.is;
32-
import static reactor.netty.http.HttpProtocol.H2C;
3333
import static reactor.netty.http.HttpProtocol.HTTP11;
3434

3535
/**
@@ -45,24 +45,32 @@ abstract public class ReactivityTest extends BaseReactorTest {
4545

4646
private static DisposableServer server;
4747

48-
@BeforeClass
49-
public static void startServer() throws JsonProcessingException {
50-
byte[] data = TestUtils.MAPPER.writeValueAsString(new OrderGenerator().generate(1)).getBytes();
51-
52-
server = HttpServer.create()
53-
.protocol(HTTP11, H2C)
54-
.route(r -> r.get("/icecream/orders/1",
55-
(req, res) -> {
56-
res.header("Content-Type", "application/json");
57-
return Mono.delay(Duration.ofMillis(DELAY_IN_MILLIS))
58-
.thenEmpty(res.sendByteArray(Mono.just(data)));
59-
}))
60-
.bindNow();
48+
@Before
49+
public void startServer() throws JsonProcessingException {
50+
if(server == null) {
51+
byte[] data = TestUtils.MAPPER.writeValueAsString(new OrderGenerator().generate(1)).getBytes();
52+
53+
server = HttpServer.create()
54+
.protocol(serverProtocols())
55+
.http2Settings(builder -> builder.maxConcurrentStreams(1000))
56+
.route(r -> r.get("/icecream/orders/1",
57+
(req, res) -> {
58+
res.header("Content-Type", "application/json");
59+
return Mono.delay(Duration.ofMillis(DELAY_IN_MILLIS))
60+
.thenEmpty(res.sendByteArray(Mono.just(data)));
61+
}))
62+
.bindNow();
63+
}
64+
}
65+
66+
protected HttpProtocol[] serverProtocols(){
67+
return new HttpProtocol[]{HTTP11};
6168
}
6269

6370
@AfterClass
6471
public static void stopServer(){
6572
server.disposeNow();
73+
server = null;
6674
}
6775

6876
@Test

feign-reactor-java11/src/test/java/reactivefeign/java11/h2c/ReactivityTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,19 @@
1515

1616
import reactivefeign.ReactiveFeign;
1717
import reactivefeign.testcase.IcecreamServiceApi;
18+
import reactor.netty.http.HttpProtocol;
1819

1920
import static reactivefeign.java11.h2c.TestUtils.builderHttp2;
21+
import static reactor.netty.http.HttpProtocol.H2C;
22+
import static reactor.netty.http.HttpProtocol.HTTP11;
2023

2124
public class ReactivityTest extends reactivefeign.ReactivityTest {
2225

26+
@Override
27+
protected HttpProtocol[] serverProtocols(){
28+
return new HttpProtocol[]{H2C, HTTP11};
29+
}
30+
2331
@Override
2432
protected ReactiveFeign.Builder<IcecreamServiceApi> builder() {
2533
return builderHttp2();

feign-reactor-jetty/src/test/java/reactivefeign/jetty/h2c/ReactivityTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,17 @@
1717
import reactivefeign.jetty.JettyReactiveFeign;
1818
import reactivefeign.jetty.JettyReactiveOptions;
1919
import reactivefeign.testcase.IcecreamServiceApi;
20+
import reactor.netty.http.HttpProtocol;
21+
22+
import static reactor.netty.http.HttpProtocol.H2C;
2023

2124
public class ReactivityTest extends reactivefeign.ReactivityTest {
2225

26+
@Override
27+
protected HttpProtocol[] serverProtocols(){
28+
return new HttpProtocol[]{H2C};
29+
}
30+
2331
@Override
2432
protected ReactiveFeign.Builder<IcecreamServiceApi> builder() {
2533
return JettyReactiveFeign.<IcecreamServiceApi>builder().options(

0 commit comments

Comments
 (0)