ribbon的简单应用,不使用注册中心

314 阅读1分钟

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。先来学习一下简单应用

案例:一个用户服务调用多个订单服务

image.png
1.maven依赖

<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.2.10.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        <version>2.2.10.RELEASE</version>
    </dependency>
</dependencies>

2.配置文件

order-sevice是服务提供者的服务名称

server.port = 8082

order-service.ribbon.listOfServers=\
  localhost:8081,localhost:8083

3.LoadBalancerClient调用

@Resource
private RestTemplate restTemplate;

@Resource
private LoadBalancerClient loadBalancerClient;

@RequestMapping("findUser")
public String findUser() {
    ServiceInstance serviceInstance = loadBalancerClient.choose("order-service");
    String url = String.format("http://%s:%s", serviceInstance.getHost(),
            serviceInstance.getPort() + "/order");
    return restTemplate.getForObject(url, String.class);
}

4.服务提供者的代码

@RestController
public class OrderController {

    @Value("${server.port}")
    private Integer port;

    @RequestMapping("order")
    public String getOrder() {
        System.out.println("port: " + port);
        return "order";
    }
}

5.服务提供者启动两个端口的服务:8081,8083(具体端口自己指定)
在一个idea中启动两个端口的服务的方法:编辑配置,点击+号,新增一个springboot应用,使用-Dserver.port指定端口即可

image.png

6.浏览器中访问本地8082端口:http://localhost:8082/findUser

image.png
7.多调用几次,可以看到是轮询调用的。

image.png

image.png