spring-boot - Spring Boot微服务架构查找服务实例数
问题描述
我正在尝试使用spring boot
. 我通过分离组件并使用 , 等技术创建ribbon
了eureka naming server
它zuul 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
。
这个问题的解决方案是什么?
解决方案
如果您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()));
}
推荐阅读
- report - 如何使用 BIRT 报表设计器生成多个页面
- d3.js - 单击按钮后条形图无法执行转换
- php - 是否有一种 php 方法可以显示删除日期的项目已删除?
- apache-spark - 自适应查询执行和 CBO
- javascript - 我如何证明每一行文本的宽度相同 - 并适合 div?
- python - 即使使用正确的键,S3 boto 连接也会导致 ClientError
- python - 如何忽略一组字符,直到遇到正则表达式中的指定字符?
- spring - 为什么访问令牌不再有到期时间?
- java - 具有很多字段的不同类型的实体 - 建模它的最佳方法是什么?
- scala - 如何在 scala 运行时知道不同的连接类型火花