简单搭建微服务springCloudNetflix服务(一)
简单搭建微服务springCloudNetflix服务【添加ribbon中间件】(二)
简单搭建微服务springCloudNetflix服务【添加Eureka中间件】(三)
简单搭建微服务springCloudNetflix服务【添加OpenFeign中间件】(四)
简单搭建微服务springCloudNetflix服务【添加Nacos配置中心中间件】(五)
简单搭建微服务springCloudNetflix服务【Hyxtrix服务保护中间件】(六)
简单搭建微服务springCloudNetflix服务【Gateway网关服务中间件】(七)
1)mall-portal 添加ribbon中间件进行负载均衡
<!--添加spring cloud ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
方法一:通过ribbon负载加载进行远程配置调用
application.properties配置添加
goods-service.ribbon.listOfServers=\
http://localhost:11001/goods,http://localhost:11004/goods
server服务启动集群配置
方法二:通过添加注解进行ribbon负载加载进行远程配置调用
application.properties配置添加
goods-service.ribbon.listOfServers=\
http://localhost:11001,http://localhost:11004
marking-service.ribbon.listOfServers=\
http://localhost:11002
order-service.ribbon.listOfServers=\
http://localhost:11003
ribbon配置负载均衡算法
类名 | 说明 |
---|---|
BestAvailableRule | 选择一个最小的并发请求的Server,逐个考察Server,如果Server被 |
BestAvailableRule | 选择一个最小的并发请求的Server,逐个考察Server,如果Server被 |
RandomRule | 随机选择一个Server |
ResponseTimeWeightedRule | 已废弃,作用同WeightedResponseTimeRule |
RetryRule | 对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的server |
RoundRobinRule | 轮询选择,轮询index,选择index对应位置的Server |
WeightedResponseTimeRule | 根据响应时间加权,响应时间越长,权重越小,被选中的可能性越低 |
ZoneAvoidanceRule | 复合判断Server所zone的性能和Server的可用性选择Server,在没有Zone的环境下,类似于轮询 |
AvailabilityFilteringRule | 过滤掉一直连接失败的被标记为circuit tripped的后端Server,并过滤掉那些高并发的后端Server或者使用一个 |
AvailabilityPredicate | 来包含过滤server的逻辑,其实就就是检查status里记录的各个Server的运行状态 |
application.properties配置添加
goods-service.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
实现自定义ribbon均衡算法【默认在配置文件当中选着自己的类全路径】
// 自定义ribbon负载均衡算法 继承 AbstractLoadBalancerRule方法
public class DefinieIpHashRule extends AbstractLoadBalancerRule {
@Override
public void initWithNiwsConfig(IClientConfig iClientConfig) {
}
public Server choose(ILoadBalancer lb, Object key) {
if (lb == null) {
return null;
}
Server server = null;
while (server == null) {
List<Server> upList = lb.getReachableServers();
List<Server> allList = lb.getAllServers();
int serverCount = allList.size();
if (serverCount == 0) {
return null;
}
server = upList.get(0); //返回服务器
if (server == null) {
/*
* The only time this should happen is if the server list were
* somehow trimmed. This is a transient condition. Retry after
* yielding.
*/
Thread.yield();
continue;
}
if (server.isAlive()) {
return (server);
}
// Shouldn't actually happen.. but must be transient or a bug.
server = null;
Thread.yield();
}
return server;
}
//重写cloose 方法实现负载均衡发放端口 可以参考ribbon实现的类
@Override
public Server choose(Object key) {
return choose(getLoadBalancer(), key);
}
}