如何改变在运行时@FeignClient名

问题描述 投票:2回答:3

我使用Spring云的Netflix打造我的微服务。

@FeignClient(name = "ms-cloud",configuration = MsCloudClientConfig.class)      
public interface TestClient {                                                  

/**                                                                        
 * @return                                                                 
 */                                                                        
@RequestMapping(value = "/test", method = RequestMethod.GET)               
String test();                                                             

}  

我想将名称更改为MS-云前,当一些特殊的用户。任何人都可以给一些建议?

spring spring-cloud
3个回答
1
投票

按照documentation假死支持在nameurl领域的占位符。

@FeignClient(name = "${store.name}")
public interface StoreClient {
    //..
}

所以,你可以在运行时使用正常的弹簧引导配置机制设置store.name=storeProd


0
投票

这实际上是可能的。在春季云动物园管理员,我们正在做类似的事情,因为在假死客户端服务的名称是不是一个有没有在在动物园管理员。它可以在YAML文件中提出的别名。在这里,你有代码示例https://github.com/spring-cloud/spring-cloud-zookeeper/blob/master/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRibbonAutoConfiguration.java#L54,在这里你有依赖关系的描述功能 - https://github.com/spring-cloud/spring-cloud-zookeeper/blob/master/docs/src/main/asciidoc/spring-cloud-zookeeper.adoc#using-the-zookeeper-dependencies


0
投票

要创建在运行时的情况下弹簧云假死客户端,你不知道服务-ID,直到调用点:

import org.springframework.cloud.openfeign.FeignClientBuilder;

@Component
public class InfoFeignClient {

  interface InfoCallSpec {
    @RequestMapping(value = "/actuator/info", method = GET)
    String info();
  }

  FeignClientBuilder feignClientBuilder;

  public InfoFeignClient(@Autowired ApplicationContext appContext) {
    this.feignClientBuilder = new FeignClientBuilder(appContext);
  }

  public String getInfo(String serviceId) {

    InfoCallSpec spec =
        this.feignClientBuilder.forType(InfoCallSpec.class, serviceId).build();

    return spec.info();
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.