每天学点SpringCloud(三):自定义Eureka集群负…
2018-07-12 07:34:50来源:博客园 阅读 ()
相信看了 每天学点SpringCloud(一):简单服务提供者消费者调用,每天学点SpringCloud(二):服务注册与发现Eureka这两篇的同学都了解到了我的套路,没错,本篇博客同样是为了解决上篇的问题的。
上篇我们使用Eureka默认的负载均衡解决了消费方调用服务方硬编码的问题,不过呢,因为是使用的默认负载均衡的策略,所以这次我们就搞一搞事情,来自定义一下它的策略。
搞这个策略呢有两种实现方式
通过代码自定义
通过代码的方式自定义负责均衡策略时需要注意的是,注意避免SpringBoot的包扫描,因为自定义的规则必须在Eureka的规则实例化以后再实例化才会生效,那么这样就有两种方式,
第一种
1.在CloudDemoConsumerApplication类上级新建包config,然后新建LoanBalanced类。使用此类注册一个IRule以达到替换Eureka的目的
package cn.org.config;
import com.netflix.loadbalancer.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class LoadBalanced {
@Bean
public IRule ribbonRule() {
return new RoundRobinRule(); //轮训
// return new WeightedResponseTimeRule(); //加权权重
//return new RetryRule(); //带有重试机制的轮训
//return new RandomRule(); //随机
//return new TestRule(); //自定义规则
}
}
2.注意包名,CloudDemoConsumerApplication的包名是cn.org.zhixiang。
3.想使用哪种负载均衡策略就new哪一种就ok
4.TestRule为自定义的规则:
package cn.org.config.domain;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.Server;
import java.util.List;
public class TestRule implements IRule {
private ILoadBalancer loadBalancer;
@Override
public Server choose(Object o) {
List<Server> servers= loadBalancer.getAllServers();
return servers.get(0);
}
@Override
public void setLoadBalancer(ILoadBalancer iLoadBalancer) {
this.loadBalancer=iLoadBalancer;
}
@Override
public ILoadBalancer getLoadBalancer() {
return this.loadBalancer;
}
}
如果有自定义的需求的话可以参照这个写法,我这只是测试使用,取的服务列表的第一个。
5.在CloudDemoConsumerApplication类上添加注解@RibbonClient(name = "provider-demo", configuration = cn.org.config.LoadBalanced
.class),指定provider-demo服务使用的是LoadBalanced类提供的规则
第二种:
依旧把LoadBalanced放到cn.org.zhixiang包下,不过呢通过自定义注解来解决包扫描的问题
1.自定义一个注解
public @interface ExcludeFromComponentScan {
}
2.类使用刚才自定义的注解标示
@Configuration
@ExcludeFromComponentScan
public class AvoidLoanbalanced {
@Bean
public IRule ribbonRule() {
return new RoundRobinRule(); //轮训
// return new WeightedResponseTimeRule(); //加权权重
//return new RetryRule(); //带有重试机制的轮训
//return new RandomRule(); //随机
//return new TestRule(); //自定义规则
}
}
3.Application中指定包扫描忽略使用上方注解的类,然后注册规则
@RibbonClient(name = "provider-demo", configuration = AvoidLoanbalanced.class)
@ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, value = ExcludeFromComponentScan.class) })
注意:上方两种方式使用一种就够了。
使用配置文件自定义
#为服务Id名称为provider-demo的项目配置负载均衡规则为com.netflix.loadbalancer.WeightedResponseTimeRule
provider-demo:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
当然,自定义负载均衡策略只需要选择代码或配置文件自定义其中的一种就可以了。毕竟美酒虽好,可不要贪杯哦。
GitHub:https://github.com/2388386839/spring-cloud-demo
码云:https://gitee.com/zhixiang_blog/spring-cloud-demo
如果对您有所帮助,请记得帮忙点一个star哦
本文出自https://zhixiang.org.cn/#/blog/read/9f8bd71e-2482-4014-8566-630aaa75f339,转载请保留。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 为什么要用springcloud? 2020-06-02
- Leader每天996,绩效被打C!CTO说,团队带不好,原因只有一 2020-05-28
- SpringCloud Alibaba 简介 2020-05-26
- SpringCloud异常处理统一封装我来做-使用篇 2020-05-23
- springcloud~服务发现之k8s服务 2020-05-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash