五、springcloud之客户端负载均衡Ribbon

一、简介

  在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式:

    一种是ribbon+restTemplate

    另一种是feign

  ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon

  ribbon核心组件有三个

    • Rule - 从服务列表中如何获取一个有效服务
    • Ping - 后台运行线程用来判断服务是否可用
    • ServerList - 服务列表

二、准备

  1.服务注册中心

  2.服务提供方:多个service

三、使用Ribbon实现客户端负载均衡的消费者

  1.pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Brixton.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    </dependencies>
</dependencyManagement>
View Code

  2.@EnableDiscoveryClient注解来添加发现服务能力

  3.通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

   RestTemplate 构建RestTemplate对应的bean,在method上使用注解@LoadBalanced表示restTemplate使用LoadBalancerClient执行请求

@Configuration
public class RibbonConfig {
    /**
     * LoadBalanced 注解表明restTemplate使用LoadBalancerClient执行请求
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        RestTemplate template = new RestTemplate();
        SimpleClientHttpRequestFactory factory = (SimpleClientHttpRequestFactory) template.getRequestFactory();
        factory.setConnectTimeout(3000);
        factory.setReadTimeout(3000);
        return template;
    }
}

  4.controller直接注入resttemplate,调用服务,即可

注:如果使用了feign,Feign默认集成了ribbon,无须任何配置,调用服务,请求会自动轮询到每个服务端来处理。

猜你喜欢

转载自www.cnblogs.com/soul-wonder/p/9214144.html