package com.netflix.discovery.shared.transport.jersey2;
import java.util.Collection;
import javax.ws.rs.client.ClientRequestFilter;
import com.netflix.appinfo.EurekaClientIdentity;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.resolver.EurekaEndpoint;
import com.netflix.discovery.shared.transport.EurekaHttpClient;
import com.netflix.discovery.shared.transport.TransportClientFactory;
import com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient;
import com.netflix.discovery.shared.transport.jersey.EurekaJerseyClient;
import com.netflix.discovery.shared.transport.jersey.TransportClientFactories;
public class Jersey2TransportClientFactories implements TransportClientFactories<ClientRequestFilter> {
private static final Jersey2TransportClientFactories INSTANCE = new Jersey2TransportClientFactories();
public static Jersey2TransportClientFactories getInstance() {
return INSTANCE;
}
@Override
public TransportClientFactory newTransportClientFactory(final EurekaClientConfig clientConfig,
final Collection<ClientRequestFilter> additionalFilters,
final InstanceInfo myInstanceInfo) {
final TransportClientFactory jerseyFactory = Jersey2ApplicationClientFactory.create(
clientConfig,
additionalFilters,
myInstanceInfo,
new EurekaClientIdentity(myInstanceInfo.getIPAddr(), "Jersey2DefaultClient")
);
final TransportClientFactory metricsFactory = MetricsCollectingEurekaHttpClient.createFactory(jerseyFactory);
return new TransportClientFactory() {
@Override
public EurekaHttpClient newClient(EurekaEndpoint serviceUrl) {
return metricsFactory.newClient(serviceUrl);
}
@Override
public void shutdown() {
metricsFactory.shutdown();
jerseyFactory.shutdown();
}
};
}
@Override
public TransportClientFactory newTransportClientFactory(Collection<ClientRequestFilter> additionalFilters,
EurekaJerseyClient providedJerseyClient) {
throw new UnsupportedOperationException();
}
}