1
1
package io .vertx .example .reactivex .web .backpressure ;
2
2
3
- import io .vertx .core .Future ;
4
3
import io .vertx .example .util .Runner ;
5
4
import io .vertx .reactivex .RxHelper ;
6
5
import io .vertx .reactivex .core .AbstractVerticle ;
6
+ import io .vertx .reactivex .core .http .HttpClient ;
7
+ import io .vertx .reactivex .core .http .HttpClientResponse ;
7
8
import io .vertx .reactivex .core .http .HttpServer ;
8
9
import io .vertx .reactivex .core .http .HttpServerRequest ;
9
10
import io .vertx .reactivex .ext .web .Router ;
10
11
import io .vertx .reactivex .ext .web .handler .BodyHandler ;
12
+ import java .util .Collections ;
13
+ import java .util .List ;
14
+ import java .util .concurrent .Callable ;
15
+ import java .util .concurrent .Executors ;
16
+ import java .util .concurrent .atomic .AtomicInteger ;
11
17
12
18
/**
13
19
* @author tomasz.michalak
14
20
*/
15
21
public class Server extends AbstractVerticle {
16
22
23
+ private static final int NUMBER_OF_REQUESTS = 1000 ;
24
+ private static final int N_THREADS = 100 ;
25
+
17
26
// Convenience method so you can run it in your IDE
18
27
public static void main (String [] args ) throws InterruptedException {
19
28
Runner .runExample (io .vertx .example .reactivex .web .backpressure .Server .class );
20
29
}
21
30
22
31
@ Override
23
- public void start (Future < Void > fut ) throws Exception {
32
+ public void start () throws Exception {
24
33
25
34
Router router = Router .router (vertx );
26
35
router .route ().handler (BodyHandler .create ());
@@ -38,7 +47,25 @@ public void start(Future<Void> fut) throws Exception {
38
47
router .accept (req );
39
48
});
40
49
41
- server .rxListen (8080 ).subscribe (res -> fut .complete (), onError -> fut .fail (onError .getCause ()));
50
+ server .rxListen (8080 ).subscribe (res -> generateRequests ());
51
+ }
52
+
53
+ private void generateRequests () throws InterruptedException {
54
+ AtomicInteger ok = new AtomicInteger (0 );
55
+ AtomicInteger fail = new AtomicInteger (0 );
56
+
57
+ List <Callable <HttpClient >> tasks = Collections .nCopies (NUMBER_OF_REQUESTS ,
58
+ () -> vertx .createHttpClient ()
59
+ .getNow (8080 , "localhost" , "/" , resp ->
60
+ log (resp , resp .statusCode () == 200 ? ok .incrementAndGet () : ok .get (),
61
+ resp .statusCode () == 503 ? fail .incrementAndGet () : fail .get ())
62
+ ));
63
+ Executors .newFixedThreadPool (N_THREADS ).invokeAll (tasks );
64
+
65
+ }
66
+
67
+ private void log (HttpClientResponse response , int ok , int fail ) {
68
+ System .out .println (response .statusCode () + ", ok=" + ok + ", fail=" + fail );
42
69
}
43
70
44
71
}
0 commit comments