SpringCloud基于nacos注册中心的三种本地负载均衡实现方式

1 篇文章 0 订阅
0 篇文章 0 订阅

第一种:

采用 RestTemplate + @LoadBalanced注解

 // 1. 编写配置类将RestTemplate 注册到spring容器中
 @Bean
 @LoadBalanced
 public RestTemplate restTemplate() {
     return new RestTemplate();
 }

 // 2.消费者调用 
 @GetMapping("/restTemplate")
 public String restTemplate() {
 	 // url 直接写生产者在nacos中注册的服务名称+方法名即可
     String result = restTemplate.getForEntity("http://server-member/getMember",String.class).getBody();
     return "restTemplate 方式获取会员服务结果:" + result;
 }

第二种:

采用 RestTemplate + LoadBalancerClient

// 1. 编写配置类将RestTemplate 注册到spring容器中
 @Bean
 public RestTemplate restTemplate() {
     return new RestTemplate();
 }

// 2. 消费者调用 
@GetMapping("/loadBalancerClient")
public String loadBalancerClient() {
	// 根据生产者在nacos中注册的服务名称本地通过负载均衡策略获取一个服务实例
    ServiceInstance serviceInstance = loadBalancerClient.choose("server-member");
    // 此时的url是最终访问服务器的ip+port
    String result = restTemplate.getForEntity(serviceInstance.getUri()+"/getMember",String.class).getBody();
    return "loadBalancerClient方式获取会员服务结果:" + result;
}

第三种:

采用@EnableFeignClients + @FeignClient

// 1. 启动类增加@EnableFeignClients注解
@SpringBootApplication
@EnableFeignClients
public class OrderApp {
    public static void main(String[] args) {
        SpringApplication.run(OrderApp.class);
    }
}

// 2. 消费者编写MemberServiceFeign 接口(注意接口一定要和生产者的接口一致)
// value为生产者在nacos中注册的服务名称
@FeignClient(value = "server-member")
public interface MemberServiceFeign {

    @GetMapping("/getMember")
    String getMember(@RequestParam("id") Long id);
}

// 3.MemberServiceFeign 远程调用
@GetMapping("/memberRpc")
public String memberRpc() {
    String result = memberServiceFeign.getMember(10L);
    return "消费者调用会员服务接口返回结果:" + result;
}

注意:

上述的本地负载均衡都是Robin的默认轮训策略,以下列举Robin负载均衡实现类:

  • RoundRobinRule 轮询
  • RandomRule 随机
  • AvailabilityFilteringRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阈值的服务,然后对剩余的服务列表进行轮询
  • WeightedResponseTimeRule 权重 根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高。
  • RetryRule 重试 先按照轮询策略获取服务,如果获取失败则在指定时间内重试,获取可用服务
  • BestAvailableRule 选过滤掉多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
  • ZoneAvoidanceRule 符合判断server所在区域的性能和server的可用性选择服

指定默认的负载策略:

//配置类 将IRule 的实现类注册到spring容器中即可
@Bean
public IRule myRule(){
    // return new RoundRobinRule();//轮询
    // return new RetryRule();//重试
    // return new BestAvailableRule();
    // return new WeightedResponseTimeRule();// 权重
    return new RandomRule();
}

pom.xml

<dependencies>
        <!--  springboot 整合web组件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>
        <!-- 采用@FeignClient实现rpc调用时引用 -->
        <!--
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
        -->
    </dependencies>

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值