一.给provider01加入controlller层
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello provider!";
}
}
二.配置consumer01
因为consumer01要注册到provicer上面所以我们要给他加Client依赖
三.再去写consumer01的HelloController
@GetMapping("/hello")
public String hello() throws IOException {
/*
* 根据服务名称去Eureka上查询服务,返回子是一个集合,因为provider01可能都是集群化部署的
*/
List<ServiceInstance> 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 "" ;
}
这种写法是最原始的写法非常多漏洞,但是有助于知道最关键的东西
四.启动consumer01
发现注入成功,而且端口也弄出来了,说明我们查询这个东西的端口和其他的都是可以的。
实际上我们学微服务的初衷就是简化调用。也是为了让调用的过程更加的可靠
五. 给Provider配置一个HelloController
@RestController
public class HelloController {
@Value("$server.port")
Integer port;
@GetMapping("/hello")
public String hello (){
return "hello provider!"+ port;
}
}
六.重新启动我们的Provider
七.再开启一个8082的provider端口
再开启一个8082的端口,且启动它这个端口,这样我们就有了两个provider端口了,来实现一个简单的负载均衡吧
八.再去给Consummer里面加入配置
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
九.再去给Consummer的Hellotroller里面写入
给Consummer01里面写入restTemplate,注意的是
restTemplate和
@GetMapping("/hello")
public String hello2() throws IOException {
/*
* 根据服务名称去Eureka上查询服务,返回子是一个集合,因为provider01可能都是集群化部署的
*/
List<ServiceInstance> 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;
}
十.这样就启动了
所以我们发现是可以进行跳转的。
十一.再给consumer01添加一个restTemplate
@Bean
/*
添加负载均衡拦截器,当这个RestTemplate实力发送请求的时候,这个请求会被
@LoadBalanced注解拦截下来,拦截下来之后,会对请求的地址进行二次处理,
使之实现负载均衡。
*/
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}