
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello provider!";
}
}
因为consumer01要注册到provicer上面所以我们要给他加Client依赖

@GetMapping("/hello")
public String hello() throws IOException {
/*
* 根据服务名称去Eureka上查询服务,返回子是一个集合,因为provider01可能都是集群化部署的
*/
List list = discoveryClient.getInstances("provider01");
//获取具体的服务,一个轮询负载均衡,这种叫做客户端负载均衡
ServiceInstance serviceInstance = list.get(0);
//获取服务的 IP 地址
String host = serviceInstance.getHost();
//获取服务的端口号
int port = serviceInstance.getPort();
String url = "http://"+host +":"+port +"/hello";
URL httpurl = new URL(url);
HttpURLConnection con =(HttpURLConnection) httpurl.openConnection();
if (con.getResponseCode() ==200){
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
String s = br.readLine();
return s;
}
return "" ;
}
这种写法是最原始的写法非常多漏洞,但是有助于知道最关键的东西

发现注入成功,而且端口也弄出来了,说明我们查询这个东西的端口和其他的都是可以的。
实际上我们学微服务的初衷就是简化调用。也是为了让调用的过程更加的可靠


@RestController
public class HelloController {
@Value("$server.port")
Integer port;
@GetMapping("/hello")
public String hello (){
return "hello provider!"+ port;
}
}

再开启一个8082的端口,且启动它这个端口,这样我们就有了两个provider端口了,来实现一个简单的负载均衡吧

@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}

给Consummer01里面写入restTemplate,注意的是
restTemplate和

@GetMapping("/hello")
public String hello2() throws IOException {
/*
* 根据服务名称去Eureka上查询服务,返回子是一个集合,因为provider01可能都是集群化部署的
*/
List list = discoveryClient.getInstances("provider01");
//获取具体的服务,一个轮询负载均衡,这种叫做客户端负载均衡
ServiceInstance serviceInstance = list.get(count++%list.size());
//获取服务的 IP 地址
String host = serviceInstance.getHost();
//获取服务的端口号
int port = serviceInstance.getPort();
String url = "http://"+host +":"+port +"/hello";
String s = restTemplate.getForObject(url, String.class);
return s;
}



所以我们发现是可以进行跳转的。
@Bean
/*
添加负载均衡拦截器,当这个RestTemplate实力发送请求的时候,这个请求会被
@LoadBalanced注解拦截下来,拦截下来之后,会对请求的地址进行二次处理,
使之实现负载均衡。
*/
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}