问题1:我想配置nacos feign客户端的url地址,想兼容两种模式,第一种是服务发现的(不配置url),另外一种是配置url地址方式,有什么解决方法?问题2:@FeignClient(name="base",url="")这样写也是可以从name服务发现么?
问题1:要在 Feign 客户端中兼容两种配置方式,即服务发现和手动配置 URL 地址两种方式,可以使用 @ConditionalOnProperty
注解结合 spring.cloud.service-registry.auto-registration.enabled
属性实现,示例如下:
@FeignClient(name = "my-service", configuration = MyServiceConfig.class)
@ConditionalOnProperty(
name = "spring.cloud.service-registry.auto-registration.enabled",
havingValue = "false")
public interface MyServiceClient {
// ...
}
在上面的示例中,通过 name
属性指定了 Feign Client 对应的服务名,configuration
属性指定了 Feign Client 的配置类。在 @ConditionalOnProperty
注解中,通过 havingValue
属性指定了该属性的值为 false
时才生效,即当禁用了服务自动注册时才使用手动配置的方式。
除了以上示例中的 spring.cloud.service-registry.auto-registration.enabled
属性外,也可以使用其他条件属性来指定是否采用服务发现,比如:
spring.cloud.discovery.enabled
:是否开启服务发现,默认为 true
。spring.cloud.service-registry.client.service-url.defaultZone
:指定服务发现的服务地址,多个地址时用逗号分隔。可以根据具体服务的配置情况选择合适的条件属性。
问题2:在 @FeignClient
注解中同时指定 name
和 url
属性时,会优先使用 url
属性指定的地址作为服务的访问地址,而忽略 name
属性中指定的服务名。因此,该方式不会通过服务发现获取服务的访问地址,而是直接使用 url
属性中指定的地址,即使指定的地址不存在也不会报错。因此,如果需要通过服务发现获取服务的访问地址,应该只指定 name
属性而不指定 url
属性。
针对问题1的回答:直接从配置文件读配置,配置文件里没有默认给个空字符串不就完事了,name照配。针对问题2的回答:可以。此回答整理自钉群“Nacos社区群4”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。