Spring Cloud学习笔记(三)-Ribbon介绍以及配置RestTemplate的负载均衡

说明:本文仅作为本人学习<<深入理解Spring Cloud与微服务构建>>一书的学习笔记,所有代码案例及文字描述均参考该书,不足之处,请留言指正,不胜感激.
一.Ribbon是什么?
  Ribbon是Netflix公司开源的一个负载均衡的组件,它将负载均衡逻辑封装在消费者的客户端,消费者因为维护了一份服务生产者的信息列表(将自己注册到Eureka Server后会获取所有向Eureka Server注册的服务信息),通过负载均衡策略将请求分摊给多个服务生产者,从而达到负载均衡的目的.
二.RestTemplate介绍
  在选用Spring Cloud作为框架的微服务项目中,服务与服务之间的调用通常使用两种方式,一种是Feign,一种是RestTemplate.RestTemplate是Spring Resources中一个访问第三方RESTful API接口的网络请求框架,是用来消费REST服务的.
三.使用RestTemplate和Ribbon来消费服务.
首先,我们启动eureka-server,端口为8761,然后启动两个producer-server,端口分别为8762,8763.在浏览器查看服务注册中心如图所示:
这里写图片描述
producer-server中我们提供了一个接口,并且可以通过返回的端口号来查看到底是调用的哪个服务:

@RestController
@RequestMapping("/producer")
public class ProducerController {
    @Value("${server.port}")
    private String port;
    @GetMapping
    public String hi(){
        return "hi,this is " + port;
    }
}

接着我们创建一个新的Module,取名customer-server,因为要将消费者服务注册到Eureka Server,所以要引入Eureka Client的起步依赖spring-cloud-starter-eureka,还有Ribbon的起步依赖spring-cloud-starter-ribbon,pom文件如下:
这里写图片描述
配置文件如下:

server:
  port: 8764
spring:
  application:
    name: customer-server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

另外,还需要在启动类上加上@EnableEurekaClient(除了Eureka Server加的是@EnableEurekaServer,其他的所有要注册到Eureka Server的服务都需要加上@EnableEurekaClient),开启Eureka Client的功能:

@SpringBootApplication
@EnableEurekaClient
public class CustomerServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(CustomerServerApplication.class, args);
    }
}

最后提供一个接口,在接口内部调用producer-server的/producer,因为生产者服务是两个,端口分别为8762,8763,我们希望在使用RestTemplate调用时,能够结合Ribbon,进行负载均衡,代码如下:

@Configuration
public class RibbonConfig {
    @Bean
    @LoadBalanced//开启restTemplate的负载均衡能力
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
@RestController
@RequestMapping("/customer")
public class CustomerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping
    public String hi(){
        return restTemplate.getForObject("http://producer-server/producer", String.class);
    }

}

启动消费者服务,在浏览器上多次访问http://localhost:8764/customer,浏览器会轮流显示如下内容:
hi,this is 8762
hi,this is 8763
这时可以发现,负载均衡器会轮流去请求producer-server的两个实例中的”/producer”接口.

猜你喜欢

转载自blog.csdn.net/fly_zhaohy/article/details/80683184