美文网首页
【Spring Cloud】03-Ribbon

【Spring Cloud】03-Ribbon

作者: Y了个J | 来源:发表于2020-01-07 21:39 被阅读0次

Ribbon是Netflix开发的一个负载均衡组件,与其他SpringCloud组件结合可以发挥出强大作用,它的负载策略有多种,默认轮询,可配置超时重试

Ribbon与Nginx不一样,nginx是服务端负载均衡,Ribbon是客户端负载均衡,具体表现为客户端从注册中心拿到服务的所有实例,然后以负载均衡方式去调用服务,默认以轮询的方式去调用服务实例

服务提供者provider-service提供/hello接口

@RestController
public class IndexController {
    @GetMapping("/hello")
    public String hello(String name , HttpServletRequest request){
        //返回端口信息
        return " From Port : " + request.getServerPort() + " , hello " + name;
    }
}

服务调用者添加ribbon依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

添加RibbonConfig配置

/**
 * ribbon负载均衡配置
 * ribbon有7种策略,随机、轮询、最小并发、响应时间加权等策略
 */
@Configuration
public class RibbonConfig {

    @Bean
    public IRule ribbonRule() {
        return new RandomRule();
    }

    /**
     * 添加LoadBalanced,使RestTemplate已负载均衡的方式调用服务
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

添加一个控制器,注入RestTemplate,访问服务提供者

@RestController
public class TestController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/sayHello")
    public String sayHello(String name) {
        String url = "http://provider-service/hello?name=" + name;
        return restTemplate.getForObject(url, String.class);
    }
}

启动两个provider-service服务,调用/sayHello接口会发现随机调用provider-service服务。

实战项目地址

相关文章

网友评论

      本文标题:【Spring Cloud】03-Ribbon

      本文链接:https://www.haomeiwen.com/subject/bubdactx.html