use of com.netflix.ribbon.http.HttpResourceGroup in project ribbon by Netflix.
the class RibbonTest method testObserve.
@Test
public void testObserve() throws IOException, InterruptedException {
MockWebServer server = new MockWebServer();
String content = "Hello world";
server.enqueue(new MockResponse().setResponseCode(200).setHeader("Content-type", "text/plain").setBody(content));
server.enqueue(new MockResponse().setResponseCode(200).setHeader("Content-type", "text/plain").setBody(content));
server.play();
HttpResourceGroup group = Ribbon.createHttpResourceGroup("myclient", ClientOptions.create().withMaxAutoRetriesNextServer(3).withReadTimeout(300000).withConfigurationBasedServerList("localhost:12345, localhost:10092, localhost:" + server.getPort()));
HttpRequestTemplate<ByteBuf> template = group.newTemplateBuilder("test", ByteBuf.class).withUriTemplate("/").withMethod("GET").build();
RibbonRequest<ByteBuf> request = template.requestBuilder().build();
Observable<ByteBuf> result = request.observe();
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<String> fromCommand = new AtomicReference<String>();
// We need to wait until the response is received and processed by event loop
// and make sure that subscribing to it again will not cause ByteBuf ref count issue
result.toBlocking().last();
result.subscribe(new Action1<ByteBuf>() {
@Override
public void call(ByteBuf t1) {
try {
fromCommand.set(t1.toString(Charset.defaultCharset()));
} catch (Exception e) {
e.printStackTrace();
}
latch.countDown();
}
});
latch.await();
assertEquals(content, fromCommand.get());
Observable<RibbonResponse<Observable<ByteBuf>>> metaResult = request.withMetadata().observe();
String result2 = "";
// We need to wait until the response is received and processed by event loop
// and make sure that subscribing to it again will not cause ByteBuf ref count issue
metaResult.toBlocking().last();
result2 = metaResult.flatMap(new Func1<RibbonResponse<Observable<ByteBuf>>, Observable<ByteBuf>>() {
@Override
public Observable<ByteBuf> call(RibbonResponse<Observable<ByteBuf>> t1) {
return t1.content();
}
}).map(new Func1<ByteBuf, String>() {
@Override
public String call(ByteBuf t1) {
return t1.toString(Charset.defaultCharset());
}
}).toBlocking().single();
assertEquals(content, result2);
}
use of com.netflix.ribbon.http.HttpResourceGroup in project ribbon by Netflix.
the class RibbonExamples method main.
public static void main(String[] args) {
HttpResourceGroup group = Ribbon.createHttpResourceGroup("myclient");
HttpRequestTemplate<ByteBuf> template = group.newTemplateBuilder("GetUser").withResponseValidator(new ResponseValidator<HttpClientResponse<ByteBuf>>() {
@Override
public void validate(HttpClientResponse<ByteBuf> response) throws UnsuccessfulResponseException, ServerError {
if (response.getStatus().code() >= 500) {
throw new ServerError("Unexpected response");
}
}
}).withFallbackProvider(new FallbackHandler<ByteBuf>() {
@Override
public Observable<ByteBuf> getFallback(HystrixInvokableInfo<?> t1, Map<String, Object> vars) {
return Observable.empty();
}
}).withHystrixProperties((HystrixObservableCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("mygroup")).andCommandPropertiesDefaults(HystrixCommandProperties.Setter().withExecutionIsolationThreadTimeoutInMilliseconds(2000)))).withUriTemplate("/{id}").build();
template.requestBuilder().withRequestProperty("id", 1).build().execute();
// example showing the use case of getting the entity with Hystrix meta data
template.requestBuilder().withRequestProperty("id", 3).build().withMetadata().observe().flatMap(new Func1<RibbonResponse<Observable<ByteBuf>>, Observable<String>>() {
@Override
public Observable<String> call(RibbonResponse<Observable<ByteBuf>> t1) {
if (t1.getHystrixInfo().isResponseFromFallback()) {
return Observable.empty();
}
return t1.content().map(new Func1<ByteBuf, String>() {
@Override
public String call(ByteBuf t1) {
return t1.toString();
}
});
}
});
}
use of com.netflix.ribbon.http.HttpResourceGroup in project ribbon by Netflix.
the class ProxyHttpResourceGroupFactory method createResourceGroup.
public HttpResourceGroup createResourceGroup() {
Class<? extends HttpResourceGroup> resourceClass = classTemplate.getResourceGroupClass();
if (resourceClass != null) {
return Utils.newInstance(resourceClass);
} else {
String name = classTemplate.getResourceGroupName();
if (name == null) {
name = classTemplate.getClientInterface().getSimpleName();
}
HttpResourceGroup.Builder builder = httpResourceGroupFactory.createHttpResourceGroupBuilder(name);
for (AnnotationProcessor processor : processors.getProcessors()) {
processor.process(name, builder, httpResourceGroupFactory, classTemplate.getClientInterface());
}
return builder.build();
}
}
Aggregations