尝试将 Feign Client 与 Eureka 和 Ribbon 一起使用-
使用带有 name-test-service 的 Eureka 注册服务。
能够成功使用 Ribbon 和 Eureka,如下所示-
@Autowired
private LoadBalancerClient loadBalancer;
public void getEmployee() throws RestClientException, IOException {
ServiceInstance serviceInstance=loadBalancer.choose("test-service");
String baseUrl=serviceInstance.getUri().toString();
baseUrl=baseUrl+"/test";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response=null;
try{
response=restTemplate.exchange(baseUrl,
HttpMethod.GET, getHeaders(),String.class);
}
这可以正常工作,包括负载平衡。
现在尝试用 Feign 替换 RestTemplate,如下所示-
@FeignClient(name="test-service")
public interface RemoteCallService {
@RequestMapping(method=RequestMethod.GET, value="/test")
public String resp();
}
并使用 feign 进行如下调用-
@Autowired
private RemoteCallService loadBalancer;
public void getEmployee() throws RestClientException, IOException {
String data=loadBalancer.resp();
}
但这不起作用。Feign URL 的格式不正确。在调试 FeignClient 具有以下值-
HardCodedTarget(type=RemoteCallService, name=test-service, url= http://test-service )
谁能告诉我我错过了什么。
谢谢