Ş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