2015-03-26 12 views
14

Moim celem jest stworzenie strategii różnych kroków, aby uzyskać od punktu do punktu komunikację między 2 komponentami, do stylu komunikacji "full blown netflix" za pomocą eureka, wstążki, hystrix. Przy każdej iteracji chcę dodać więcej, podczas gdy ja próbuję ograniczyć ilość zmian do rzeczywistego kodu. Feign to moja preferowana struktura po stronie klienta, aby tak się stało. Pierwszym krokiem jest stworzenie FeignClient do komunikowania się z serwerem:Czy mogę skonfigurować adres URL @FeignClient przy użyciu pliku properties/yml?

@FeignClient(url = "http://localhost:9000") 
interface Client { 
    @RequestMapping(method = RequestMethod.GET, value = "/author/{author}/addedValue/{addedValue}") 
    Result addToTotal(@RequestParam(value="author") String author, @RequestParam(value="addedValue") long addedValue); 
} 

To działa, ale nie chcę URL być ustalony w adnotacji. Chciałbym mieć to: @FeignClient() i mają właściwości skonstruować jak: client.url: http://localhost:9000

Do tej pory nie mogę znaleźć żadnych wskazówek, w jaki sposób skonfigurować, że nie mogłem znaleźć rozwiązanie w źródłach wiosennej chmury.

Czy można to zrobić i jeśli tak; w jaki sposób?

Odpowiedz

25

Można to zrobić za pomocą "serviceId" zamiast "url". Na przykład.

@FeignClient("foo") 
interface Client { ... } 

i

foo.ribbon.listOfServers: localhost:9000 

np zobacz http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-ribbon-without-eureka dla dokumentów.

+0

Dzięki! To rozwiązuje! (Nie wiedziałem, że wielkość liter ma znaczenie) –

+0

Zasadniczo nie jest tak, jeśli jest używany do łączenia ze Spring Boot '@ ConfigurationPoperties', ale jest to natywna wersja Netflix. –

+1

Próbowałem, ale mam następujący błąd: 'com.netflix.client.ClientException: Load balancer nie ma dostępnego serwera dla klienta: foo'. Uwaga: Używam 'application.yml', a nie' application.properties' – Pleymor

8

Można to zrobić tak:

@FeignClient(name="fd-mobileapi-service",url="${fdmobile.ribbon.listOfServers}") 

Gdzie fdmobile.ribbon.listOfServers : value jest nieruchomość w application.properties.

Przetestowałem to i działa.

Powiązane problemy