SpringCloud Netflix之ribbon的使用

一 是什么

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。简而言之,在客户端实现负载均衡的工具。

二 怎么用

  1. 先创建两个工程,一个作为消费方,另一个作为服务方,比如用户服务和订单服务。
  2. 订单服务(spring-cloud-order-service)作为消费方需要访问用户服务,需要做的操作如下:
    (1) 在pom.xml中添加ribbon的依赖:
<dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
           <version>2.2.3.RELEASE</version>
</dependency>

(2) 在application.properties中配置服务列表,格式为服务提供者名称+ribbon.listOfServers,如下:

# 配置指定服务的提供者的地址列表
spring-cloud-user-service.ribbon.listOfServers=\
  localhost:9091,localhost:9092

其中spring-cloud-user-service为服务提供者的项目名称

(3)创建OrderController,创建访问入口,

@RestController
public class OrderController {
    @Autowired
    RestTemplate restTemplate;
     /**
     * 将RestTemplate加入到IOC容器中
     * 加入@LoadBalanced注解
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    @RequestMapping("/order/{id}")
    public String getOrdersById(@PathVariable("id")int id){
        //return restTemplate.getForObject("http://localhost:9091/user?userId="+id,String.class);//单个服务提供者时访问
        return restTemplate.getForObject("http://spring-cloud-user-service/user",String.class);
    }
}
  1. 用户服务(spring-cloud-user-service)作为服务提供者需要做的操作如下
    (1)在application.properties中配置服务名称和端口:
server.port=9091
spring.application.name=spring-cloud-user-service

(2)创建UserService类

@RestController
public class UserService {
    @Value("${server.port}")
    private int port;

    @GetMapping("/user")
    public String getUser(){
        System.out.println("port:"+port);
        return "provider port = "+port;
    }
}

(3)启动两个服务,模拟负载均衡,一个可以通过main方法启动:
SpringCloud Netflix之ribbon的使用_第1张图片
另一个通过命令启动,点击edit Configurations
SpringCloud Netflix之ribbon的使用_第2张图片
点击+,选择SpringBoot
SpringCloud Netflix之ribbon的使用_第3张图片
创建应用名称,Main class里选择服务提供者的main方法,VM options中指定端口号,并启动服务
SpringCloud Netflix之ribbon的使用_第4张图片
服务提供者一共启动了两个服务,端口分别为9091和9092

  1. 启动订单服务,浏览器中输入访问地址:http://localhost:9090/order/1,并多次访问
    SpringCloud Netflix之ribbon的使用_第5张图片
    再次运行端口变成了9092
    SpringCloud Netflix之ribbon的使用_第6张图片
    经过多次实践,发现访问端口在交替进行,这就涉及ribbon的负载均衡策略了,原理下节再讲。

你可能感兴趣的:(SpringCloud,java)