首页 > 解决方案 > Spring Boot微服务架构查找服务实例数

问题描述

我正在尝试使用spring boot. 我通过分离组件并使用 , 等技术创建ribboneureka naming serverzuul API

service1从 db 读取输入并service2通过功能区、eureka 和 zuul 调用。

List<Object> inputs= ...
for(Object input: inputs){
    service2Proxy.process(input); // calling service 2
}

是否可以service2根据可用实例的数量调用service2?即,如果一次有 3 个实例service2可用,我一次只需要调用 3 个请求service2

这个问题的解决方案是什么?

标签: spring-bootnetflix-zuulnetflix-eurekanetflix-ribbon

解决方案


如果您LoadBalancerClient直接使用(通过自动装配)然后使用LoadBalancerClient.choose(serviceId),那么您可以获得ServiceInstance它返回的信息。这包含服务的 uri。因此,在每次调用之后,将此 uri 存储在一组 uri 中,然后在进行另一个调用之前检查您是否已经使用了服务器实例。如果所有服务器都已用尽,请等待进一步的输入。当您准备好再次处理时,清除设置并重复。正如这里的文档中所解释的,代码有点像这样

@Autowired
    private LoadBalancerClient loadBalancer;

    public void doStuff() {
        ServiceInstance instance = loadBalancer.choose("stores");
        URI serverUri = instance.getUri();
     // use you logic here
        URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));

    }

推荐阅读