开发者社区 > 云原生 > 正文

我想配置nacos feign客户端的url地址,想兼容两种模式,有什么解决方法?

问题1:我想配置nacos feign客户端的url地址,想兼容两种模式,第一种是服务发现的(不配置url),另外一种是配置url地址方式,有什么解决方法?问题2:@FeignClient(name="base",url="")这样写也是可以从name服务发现么?

展开
收起
三分钟热度的鱼 2023-05-29 13:13:54 217 0
2 条回答
写回答
取消 提交回答
  • 问题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 注解中同时指定 nameurl 属性时,会优先使用 url 属性指定的地址作为服务的访问地址,而忽略 name 属性中指定的服务名。因此,该方式不会通过服务发现获取服务的访问地址,而是直接使用 url 属性中指定的地址,即使指定的地址不存在也不会报错。因此,如果需要通过服务发现获取服务的访问地址,应该只指定 name 属性而不指定 url 属性。

    2023-05-29 13:43:07
    赞同 展开评论 打赏
  • 针对问题1的回答:直接从配置文件读配置,配置文件里没有默认给个空字符串不就完事了,name照配。针对问题2的回答:可以。此回答整理自钉群“Nacos社区群4”

    2023-05-29 13:35:49
    赞同 展开评论 打赏
问答分类:
问答地址:

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
Nacos架构&原理 立即下载
workshop专场-微服务专场-开发者动手实践营-微服务-使用Nacos进行服务的动态发现和流量调度 立即下载
Nacos 启航,发布第一个版本, 云原生时代助力用户微服务平台建设 立即下载