一、我需要在笔记(九)的项目基础上进行开发 (https://blog.csdn.net/ssdate/article/details/88316371),但是要稍微有所改动:
这里我们暂时只需要启动eureka_server 的 peer1实例即可。启动过程会报错,因为无法注册peer1\peer2服务,这里可以忽略。
二、在module eureka_client的 EurekaClientApplication 添加以下代码即可:
@Value("${server.port}")
String port="" ; //当前实例的端口号
@GetMapping("/hello")
public String hello(){
//输出被客户端调用的信息
return "hello Ribbo : port : "+ port ;
}
给eureka_client创建两个启动实例(参考集群server配置),端口分别为8762、8772
二、在module,study_client的pom里添加Ribbo的依赖:
org.springframework.cloud
spring-cloud-starter-ribbon
首先需要写一个RESTful API 接口,在内部需要调用前面eureka_client的hello接口,即消费服务。由于eureka_client有两个实例,因此在调用的时候,希望能轮询访问这两个实例,这时候就需要将RestTemplat和Ribbo相结合,进行负载均衡。
通过查阅文档,可以知道要将他们结合,就需要在程序的IOC中容器中注入一个RestTemplate的Bean,并在Bean上添加@LoadBalanced注解,此时RestTemplate就结合ribbon开启了负载均衡功能:
@Configuration
public class RibboConfig {
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
写一个RibbonService 类,在该类的 hi() 方法用 restTemplate 调用 eureka_service API 接口 此时 Uri 上不需要使用硬编码(例如 Ip地址),只需要写服务名 eureka_client即可,代码如下:
@Service
public class RibboService {
@Autowired
RestTemplate restTemplate;
public String hi(){
String url ="http://eureka_server/hello";
return restTemplate.getForObject(url,String.class);
}
}
再写一个Controller类,开启RestController功能,写一个接口,调用RibboService接口的hi方法:
@RestController
public class testController {
@Autowired
RibboService ribboService ;
@GetMapping("/hi")
public String hi(){
return ribboService.hi();
}
}
到这里我们的代码就完成了,分别启动:
1.eureka_server的peer1实例
2.eureka_client的client1、client2实例
3.study_client
浏览器输入:http://localhost:8763/hi
此时会发现并没有达到我们想要的效果,控制台报错,无法连接到实例hostname:
页面效果:
此时修改eureka_client两个实例的配置文件:
同时修改RibbonService的地址:
此时全部重启,继续访问:http://localhost:8763/hi
会发现负载均衡起作用了,会轮流的请求eureka-client的两个实例。
示例代码:https://download.csdn.net/download/ssdate/11008346