我正在尝试使用spring boot
建立微服务架构。我是通过分离各个组件并使用ribbon
,eureka naming server
,zuul API
等技术创建的。
service1
从数据库读取输入,并通过功能区,尤里卡和zuul调用service2
。
List<Object> inputs= ...
for(Object input: inputs){
service2Proxy.process(input); // calling service 2
}
是否可以根据service2
的可用实例数来调用service2
?
即,如果一次有3个service2
实例,我一次只需要向service2
调用3个请求。
该问题的解决方案是什么?
答案 0 :(得分:0)
如果直接(通过自动装配)直接使用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()));
}