用SpringCloud Alibaba搭建属于自己的微服务(十五)~基础搭建~使用openfeign集成ribbon负载均衡.

一.概述

微服务的部署往往是集群模式,一个微服务往往有多个节点,ribbon提供了客户端负载均衡算法,让我们能够实现压力分摊的调用.

二.微服务集成ribbon.

1.我们可以看到openfeign中有了ribbon相关的依赖,默认实现了负载均衡.

在这里插入图片描述

2.我们编写代码测试下.

(1).rpc调用服务端(server-basic).

a.RibbonTestProducerController.java
package com.ccm.server.basic.controller;

import com.ccm.common.exception.result.ResultSet;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description ribbon负载均衡测试服务端
 * @Author zhouzhiwu
 * @CreateTime 2020/07/18 19:37
 */
@RestController
@RequestMapping(value = "ribbonTestProducer")
@Api(tags = "ribbon负载均衡测试服务端")
public class RibbonTestProducerController {

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

    @ApiOperation(value = "ribbon负载均衡测试")
    @GetMapping(value = "test01")
    public ResultSet test01() {
        return ResultSet.success("我是server-basic的数据,端口="+port);
    }
}

(2).rpc调用客户端(server-user).

a.RibbonTestConsumerController.java
package com.ccm.server.user.controller;

import com.ccm.common.exception.ServerException;
import com.ccm.common.exception.result.ResultSet;
import com.ccm.server.user.openfeign.ServerBasicFeign;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description ribbon负载均衡测试客户端
 * @Author zhouzhiwu
 * @CreateTime 2020/07/18 19:37
 */
@RestController
@RequestMapping(value = "ribbonTestProducer")
@Api(tags = "ribbon负载均衡测试服务端")
public class RibbonTestConsumerController {

    @Autowired
    private ServerBasicFeign serverBasicFeign;


    @ApiOperation(value = "ribbon负载均衡测试")
    @GetMapping(value = "test01")
    public ResultSet test01() {
        ResultSet<String> feignVO = serverBasicFeign.test02();
        if(feignVO.getCode() == 0) {
            return ResultSet.success(feignVO.getData());
        }
        throw new ServerException("调用外部服务失败");
    }
}
b.ServerBasicFeign.java,见方法test02
package com.ccm.server.user.openfeign;


import com.ccm.common.exception.result.ResultSet;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 *  @Description 调用server-basic的feign层
 *  @Author zhouzhiwu
 *  @CreateTime 2020/07/17 9:46
 */
@FeignClient(name = "server-basic")
public interface ServerBasicFeign {

    @GetMapping(value = "openFeignTest/test01")
    ResultSet<String> test01();

    @GetMapping(value = "ribbonTestProducer/test01")
    ResultSet<String> test02();
}

(3).server-basic启动两个服务,端口分别为2001和2002,server-user服务只用启动一个.在这里插入图片描述

(4).swagger测试,可以看出默认的负载均衡规则是轮询模式.

在这里插入图片描述
在这里插入图片描述

(5).修改ribbon负载均衡算法规则,可以自行测试.

package com.ccm.server.user.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Description ribbon负载均衡配置
 * @Author zhouzhiwu
 * @CreateTime 2020/07/18 20:12
 */
@Configuration
public class RibbonConfig {
    @Bean
    public IRule rule(){
        //return new RoundRobinRule();//轮询
        //return new RetryRule();//重试
        return new RandomRule();
    }
}

在这里插入图片描述
源码地址:https://gitee.com/chouchimoo/ccm-mall.git(本章节分支:zj-15)

猜你喜欢

转载自blog.csdn.net/theOldCaptain/article/details/107433955
今日推荐