@@ -4,10 +4,11 @@ use hyper::{
4
4
Request , Response , Uri ,
5
5
} ;
6
6
use std:: time:: Duration ;
7
- use tower:: { builder:: ServiceBuilder , reconnect:: Reconnect , Service , ServiceExt } ;
7
+ use tower:: { MakeService , Service } ;
8
+ use tower:: builder:: ServiceBuilder ;
8
9
use tower_hyper:: {
10
+ Body ,
9
11
client:: { Builder , Connect } ,
10
- retry:: { Body , RetryPolicy } ,
11
12
util:: Connector ,
12
13
} ;
13
14
@@ -24,40 +25,30 @@ fn request() -> impl Future<Item = Response<hyper::Body>, Error = ()> {
24
25
let connector = Connector :: new ( HttpConnector :: new ( 1 ) ) ;
25
26
let hyper = Connect :: new ( connector, Builder :: new ( ) ) ;
26
27
27
- // RetryPolicy is a very simple policy that retries `n` times
28
- // if the response has a 500 status code. Here, `n` is 5.
29
- let policy = RetryPolicy :: new ( 5 ) ;
30
28
// We're calling the tower/examples/server.rs.
31
29
let dst = Destination :: try_from_uri ( Uri :: from_static ( "http://127.0.0.1:3000" ) ) . unwrap ( ) ;
32
30
33
- // Now, to build the service! We use two BufferLayers in order to:
34
- // - provide backpressure for the RateLimitLayer, and ConcurrencyLimitLayer
35
- // - meet `RetryLayer`'s requirement that our service implement `Service + Clone`
36
- // - ..and to provide cheap clones on the service.
37
- let maker = ServiceBuilder :: new ( )
31
+ // Now, to build the service!
32
+ let mut maker = ServiceBuilder :: new ( )
38
33
. buffer ( 5 )
39
34
. rate_limit ( 5 , Duration :: from_secs ( 1 ) )
40
35
. concurrency_limit ( 5 )
41
- . retry ( policy)
42
- . buffer ( 5 )
43
- . make_service ( hyper) ;
36
+ . service ( hyper) ;
44
37
45
- // `Reconnect` accepts a destination and a MakeService, creating a new service
46
- // any time the connection encounters an error.
47
- let client = Reconnect :: new ( maker , dst ) ;
38
+ let client = maker
39
+ . make_service ( dst )
40
+ . map_err ( |err| eprintln ! ( "Connect Error {:?}" , err ) ) ;
48
41
49
42
let request = Request :: builder ( )
50
43
. method ( "GET" )
51
- . body ( Body :: from ( Vec :: new ( ) ) )
44
+ . body ( Vec :: new ( ) )
52
45
. unwrap ( ) ;
53
46
54
- // we check to see if the client is ready to accept requests.
55
47
client
56
- . ready ( )
57
48
. map_err ( |e| panic ! ( "Service is not ready: {:?}" , e) )
58
49
. and_then ( |mut c| {
59
50
c. call ( request)
60
- . map ( |res| res. map ( |b| b . into_inner ( ) ) )
51
+ . map ( |res| res. map ( Body :: into_inner) )
61
52
. map_err ( |e| panic ! ( "{:?}" , e) )
62
53
} )
63
54
}
0 commit comments