《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务

一、我需要在笔记(九)的项目基础上进行开发 (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 ;
    }

《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务

给eureka_client创建两个启动实例(参考集群server配置),端口分别为8762、8772
《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务

二、在module,study_client的pom里添加Ribbo的依赖:

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

首先需要写一个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:
《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务

页面效果:

《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务

经过折腾才发现是使用规则的问题.
《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务

此时修改eureka_client两个实例的配置文件:
《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务
同时修改RibbonService的地址:
《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务

此时全部重启,继续访问:http://localhost:8763/hi    
会发现负载均衡起作用了,会轮流的请求eureka-client的两个实例。
《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务

示例代码:https://download.csdn.net/download/ssdate/11008346