【问题标题】:Spring boot micro service architecture find number of instances of serviceSpring Boot微服务架构查找服务实例数
【发布时间】:2019-02-01 09:32:58
【问题描述】:

我正在尝试使用spring boot 设置微服务架构。我通过分离组件并使用ribboneureka naming serverzuul API 等技术创建了它。

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

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

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

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

【问题讨论】:

  • 您想要这样做的任何具体原因,因为功能区客户端负载均衡器将继续使用循环策略分配调用。

标签: spring-boot netflix-zuul netflix-eureka netflix-ribbon


【解决方案1】:

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

@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()));

    }

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多