2016-02-03 3 views
1

Я использую Spring Cloud Netflix для создания моего микросервиса.Как изменить имя @FeignClient во время выполнения

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

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

} 

Я хочу изменить имя на ms-cloud-pre, когда какой-то особый пользователь. Кто-нибудь может дать совет?

ответ

0

Это на самом деле возможен. В Spring Cloud Zookeeper мы делаем аналогичную вещь, поскольку имя сервиса в клиенте Feign не является тем, что есть в Zookeeper. Это может быть псевдоним, представленный в файле 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

Возможно, это изящный способ реализации – bao

+0

Это квест или заявление? : P Я имею в виду, это поможет вам в любом случае? –

+0

Теперь я использую eureka как центр сервера регистрации – bao

1

Согласно documentation симулировать поддерживает заполнителей в name и url полей.

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

Таким образом, вы можете установить store.name=storeProd во время выполнения, используя обычные механизмы конфигурации загрузки пружинные.

+0

Примечание: вы не можете изменять его динамически на основе параметра или локального контекста. – spencergibb

+0

Как обычный пользователь, store.name = storeProd, но с некоторыми учетными данными, store.name = storeProd-pre,. – bao

+0

Нет, вы не можете этого сделать. – spencergibb

Смежные вопросы