All Downloads are FREE. Search and download functionalities are using the official Maven repository.

netflix.ocelli.rxnetty.HttpClientConfigurator Maven / Gradle / Ivy

There is a newer version: 0.1.0-rc.2
Show newest version
package netflix.ocelli.rxnetty;

import io.netty.buffer.ByteBuf;
import io.reactivex.netty.RxNetty;
import io.reactivex.netty.protocol.http.client.HttpClientRequest;
import io.reactivex.netty.protocol.http.client.HttpClientResponse;

import java.util.concurrent.TimeUnit;

import netflix.ocelli.Host;
import netflix.ocelli.Instance;
import netflix.ocelli.executor.ExecutorBuilder;
import netflix.ocelli.executor.ExecutorBuilder.Configurator;
import netflix.ocelli.functions.Delays;
import netflix.ocelli.functions.Metrics;
import netflix.ocelli.util.SingleMetric;
import rx.Observable;
import rx.functions.Func0;
import rx.functions.Func1;
import rx.functions.Func2;

public class HttpClientConfigurator implements Configurator, HttpClientRequest, HttpClientResponse> {

    private final Observable> hosts;
    
    public HttpClientConfigurator(Observable> hosts) {
        this.hosts = hosts;
    }
    
    @Override
    public void configure(ExecutorBuilder, HttpClientRequest, HttpClientResponse> builder) {
        final Func0> metricFactory = new Func0>() {
            @Override
            public SingleMetric call() {
                return Metrics.memoize(10L);
            }
        };
        
        builder
            .withInstances(hosts)
            .withClientFactory(
                new Func1>() {
                    @Override
                    public HttpClientHolder call(Host host) {
                        return new HttpClientHolder(
                                RxNetty.createHttpClient(host.getHostName(), host.getPort()),
                                metricFactory.call());
                    }
                })
            .withQuarantineStrategy(Delays.fixed(1, TimeUnit.SECONDS))
            .withFailureDetector(HttpClientHolder.failureDetector())
            .withClientShutdown(HttpClientHolder.shutdown())
            .withRequestOperation(new Func2, HttpClientRequest, Observable>>() {
                @Override
                public Observable> call(
                        HttpClientHolder holder,
                        HttpClientRequest request) {
                    return holder.getClient().submit(request);
                }
            });
    }  
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy