Server应用启动时, 常规中心(Dspring.cloud.nacos.discovery.server)下无A服务实例 在扩展的中心(additional_nacos_address)下有A服务实例 启动项目以后,可以发现Server 在2个中心下都确实有注册成功,但是在Server应用内调用A服务时,却提示找不到服务实例。看样子是双注册成功了,双订阅失败了。哪位大佬帮忙解决下。
PS: 我怀疑是因为官方的这个描述导致的问题。 对于Spring Cloud应用,该方案当前仅支持服务消费端采用Ribbon负载均衡的应用进行双订阅,采用Spring Cloud LoadBalancer负载均衡组件的消费端应用暂不支持。
那么又有什么办法在Server应用上启用Ribbon 做为负载均衡吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您描述的问题,您在Server应用中遇到了双注册成功但双订阅失败的情况,特别是在使用Spring Cloud LoadBalancer作为负载均衡组件时遇到不支持的状况。您希望了解如何在Server应用上启用Ribbon作为负载均衡器以解决此问题。结合知识库信息,以下为您的解决方案:
为了启用Ribbon作为负载均衡器,首先需要确保项目中包含了Ribbon的相关依赖。对于Maven项目,在pom.xml
文件中添加如下依赖(如果尚未添加):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
接下来,需要配置Ribbon来管理服务间调用的负载均衡。在您的配置类或application.yml
/application.properties
中,指定使用Ribbon进行服务发现和负载均衡。例如,在application.yml
中添加:
# 指定使用Ribbon作为负载均衡客户端
spring:
cloud:
loadbalancer:
ribbon:
enabled: true
如果您之前使用Feign或RestTemplate直接通过服务名调用,Ribbon会自动集成并提供负载均衡能力。对于Feign客户端,无需额外配置;若使用RestTemplate,则需通过@LoadBalanced
注解标记其Bean,示例代码如下:
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
确保Nacos客户端配置正确地指定了两个注册中心地址,以便能够同时从两个注册中心发现服务实例。根据文档,您可能已经正确设置了additional_nacos_address
来指向扩展的Nacos注册中心。
通过以上步骤,您应该能够在Server应用中启用Ribbon作为负载均衡器,从而解决双订阅失败的问题。请记得在实施每一步骤后仔细测试,确保更改有效且未引入其他问题。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。