原因:没有添加之前是通过url="http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/user/"+id;
@RestController
@RequestMapping(value = "consumer")
public class UserContrller {
@Autowired
private RestTemplate restTemplate;
//此对象用于向注册中心获得服务列表
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping("/{id}")
public User findUserById(@PathVariable(value ="id") Integer id){
List<ServiceInstance> instanceList = discoveryClient.getInstances("user-provider");
ServiceInstance serviceInstance = instanceList.get(0);
URI uri= serviceInstance.getUri();
System.out.println("uri="+uri);
String url="http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/user/"+id;
return restTemplate.getForObject(url,User.class);
}
}
改成名称访问:
修改user-consumer的com.itheima.controller.UserController的调用方式,不再手动获取ip和端口,而是直接通过服务名称调用,代码如下:
@GetMapping(value = "/{id}")
public User queryById(@PathVariable(value = "id")Integer id){
/*String url = "http://localhost:18081/user/find/"+id;
return restTemplate.getForObject(url,User.class);*/
//获取指定生产者的实例列表
/* List<ServiceInstance> instances = discoveryClient.getInstances("user-provider");
//获取第一个实例对象
ServiceInstance instance = instances.get(0);
String url = "http://"+instance.getHost()+":"+instance.getPort()+"/user/find/"+id;*/
String url = "http://user-provider/user/find/"+id;
return restTemplate.getForObject(url,User.class);
}