RIBBON实现软负载均衡如下三点
服务发现就是依据名字把所属的实例全部找出来,
服务规则就是如何从多个实例种选出一个实例来服务,
服务监听就是检查出失效的服务,高效剔除
流程如下
通过ServerList查出所有可用列表,然后通过ServerListFilter过滤掉一部分地址,最后再从IRule中选出一个服务为此次服务
默认的负载均衡策略是轮询下面建立一个小测试测试一下
首先建立两个服务 并注册一个名字,然后里面一个内容写1,一个写2
server.port=30525
#applications
spring.datasource.url=jdbc:oracle:thin:@192.168.66.226:1521:znjt
spring.datasource.username=znjtpostman
spring.datasource.password=znjtpostman
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
#mybatis
#mybatis.mapper-locations=classpath:/mappers/postman/*Mapper.xml
mybatis.mapper-locations=classpath*:com/sola/mappers/**/*.xml
#mybatis.type-aliases-package=briliance.znjt.business.template.entity
spring.application.name=EurekaClient-PostMan
eureka.client.service-url.defaultZone: http://localhost:30520/eureka/,http://localhost:31520/eureka/
server.port=30522
#applications
spring.datasource.url=jdbc:oracle:thin:@192.168.66.226:1521:znjt
spring.datasource.username=znjtpostman
spring.datasource.password=znjtpostman
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
#mybatis
#mybatis.mapper-locations=classpath:/mappers/postman/*Mapper.xml
mybatis.mapper-locations=classpath*:com/sola/mappers/**/*.xml
#mybatis.type-aliases-package=briliance.znjt.business.template.entity
spring.application.name=EurekaClient-PostMan
eureka.client.service-url.defaultZone: http://localhost:30520/eureka/,http://localhost:31520/eureka/
然后我们去建立个服务去调用测试
package com.sola.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.sola.dao.RoadWorkDao;
@Service
public class RoadWorkService {
@Autowired
private RoadWorkDao resourcesdao;
@Autowired
private RestTemplate resttemplate;
public Map<String, Object> findroadwork() {
// TODO Auto-generated method stub
List<Map<String, Object>> list = null ;
Map<String,Object> map = new HashMap<>();
list = resourcesdao.findroadwork();
String forObject = resttemplate.getForObject("http://EUREKACLIENT-POSTMAN/eurekaApi/test", String.class);
map.put("postman", forObject);
map.put("data", list);
return map;
}
}
SWAGGER测试结果
点一下换一次说明默认确实是轮询
可更换几种负载方式
https://blog.csdn.net/liuchuanhong1/article/details/54693124
代码示例
在调用服务的application.properties配置加入
EUREKACLIENT-POSTMAN.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
//格式 实例名字.固定格式
//这个是测试了一个随机服务
测试真的按照了随机来调用服务=。=