SpringBoot 整合 Ribbon

使用 LoadBalanceClient

  1. 引入 jar 包

    1
    2
    3
    4
    5
     <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    <version>2.2.3.RELEASE</version>
    </dependency>

    注意 springboot 版本和 jar 包版本差异问题

  2. 配置负载

    1
    2
    spring-cloud-order.ribbon.listOfServers=\
    localhost:8180,localhost:8181
  3. 业务使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    @RestController
    public class TestController {

    @Autowired
    private RestTemplate restTemplate;

    @Bean
    private RestTemplate restTemplate() {
    return new RestTemplate();
    }

    @Autowired
    LoadBalancerClient loadBalancerClient;

    @GetMapping("/test")
    public String test() {
    ServiceInstance serviceInstance =loadBalancerClient.choose("spring-cloud-order");

    String url = String
    .format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort() + "/order");
    String result = restTemplate.getForObject(url, String.class);
    System.out.println(result);
    return result;
    }

    }

    loadBalancerClient 获取服务的负载地址,通过 RestTemplate 访问请求。

使用注解封装 RestTemplate

  1. 引入 jar 和配置入和上一个步骤一致

  2. 业务使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    @RestController
    public class Test2Controller {

    @Autowired
    RestTemplate restTemplate;

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){
    return restTemplateBuilder.build();
    }

    @GetMapping("/test")
    public String test() {

    String url = "http://spring-cloud-order/order";
    String result = restTemplate.getForObject(url, String.class);
    System.out.println(result);
    return result;
    }

    }

    @LoadBalanced 注解使用在 RestTemplate 的生成上面.(注意@Bean 注解必须在@LoadBalanced 上面 )