我有一個作爲Eureka客戶端的Spring Boot應用程序。該應用程序需要通過REST調用另一個微服務,並且我希望使用Feign進行此調用。我遇到的問題是,我的應用程序正試圖在Eureka中查找服務名稱,當它僅在我的應用程序yaml文件中定義時。Feign客戶端通過Eureka在yaml中優先化URL
對於難以理解的解釋,我表示歉意,希望下面的代碼片段有助於澄清。
假死客戶端:
@FeignClient("foo")
@Component
public interface FooServiceProxy{
@RequestMapping(value = "/balance", method = RequestMethod.POST, produces = "application/json")
ServiceResponse execute(ServiceRequest serviceRequest);
}
在我的控制器誰調用這個假死客戶端時,FooServiceProxy使用@Autowired定義:
@Autowired
private FooServiceProxy fooServiceProxy;
我YAML文件如下:
spring:
application:
name: app-name
server:
port: 8080
foo:
ribbon:
listOfServers: http://hostname:8081/balance
eureka:
client:
fetchRegistry: false
serviceUrl:
defaultZone: http://eurekasrver:8761/eureka/
我的問題是,在運行時,引發以下錯誤: java.lang.RuntimeException:com.netflix.client.ClientException:負載均衡器沒有可用的客戶端服務器:foo
有趣的是,如果我從應用程序中刪除@EnableEurekaClient註釋,則一切正常。我相信我理解這個問題,而不是在yaml文件中查找foo的服務器,因爲應用程序是Eureka客戶端,Feign直接找Eureka查找服務器ip,然後失敗,因爲找不到任何服務器。儘管似乎理解了這個問題,但我一直無法在網上找到解決方案或自己想一個解決方案。
任何幫助將不勝感激。 謝謝!