Şu satırı dahil ederiz
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
Açıklaması şöyle
IgniteServiceInstanceListSuppler will return instances based on the request key.
Şöyle yaparız
import org.springframework.cloud.client.DefaultServiceInstance; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.Request; import org.springframework.cloud.client.loadbalancer.RequestDataContext; import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; public class IgniteServiceInstanceListSuppler implements ServiceInstanceListSupplier { private final IgniteEx ignite = ...; private volatile List<ServiceInstance> instances = ...; @Override public String getServiceId() { return ignite.localNode().consistentId().toString(); } @Override public Flux<List<ServiceInstance>> get() { return Flux.just(instances); } @Override public Flux<List<ServiceInstance>> get(Request req) { if (req.getContext() instanceof RequestDataContext) { HttpHeaders headers = ((RequestDataContext)req.getContext()). .getClientRequest().getHeaders(); String cacheName = headers.getFirst("affinity-cache-name"); String affinityKey = headers.getFirst("affinity-key"); Affinity<Object> affinity = affinities.computeIfAbsent( cacheName, k -> ((GatewayProtectedCacheProxy)ignite.cache(cacheName)). context().cache().affinity() ); ClusterNode node = affinity.mapKeyToNode(affinityKey); if (node != null) return Flux.just(singletonList(toServiceInstance(node))); } return get(); } }
Hiç yorum yok:
Yorum Gönder