本文共 3470 字,大约阅读时间需要 11 分钟。
微服务的部署往往是集群模式,一个微服务往往有多个节点,ribbon提供了客户端负载均衡算法,让我们能够实现压力分摊的调用.
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 ccm * @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); }}
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 ccm * @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() { ResultSetfeignVO = serverBasicFeign.test02(); if(feignVO.getCode() == 0) { return ResultSet.success(feignVO.getData()); } throw new ServerException("调用外部服务失败"); }}
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 ccm * @CreateTime 2020/07/17 9:46 */@FeignClient(name = "server-basic")public interface ServerBasicFeign { @GetMapping(value = "openFeignTest/test01") ResultSettest01(); @GetMapping(value = "ribbonTestProducer/test01") ResultSet test02();}
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 ccm * @CreateTime 2020/07/18 20:12 */@Configurationpublic class RibbonConfig { @Bean public IRule rule(){ //return new RoundRobinRule();//轮询 //return new RetryRule();//重试 return new RandomRule(); }}
源码地址:
您的点赞、收藏、转发和关注是我持续创作的动力!
转载地址:http://jktli.baihongyu.com/