概念:
Ribbon是一种客户端负载平衡器,可让您对HTTP和TCP客户端的行为进行大量控制。Feign已使用Ribbon,因此,如果使用@FeignClient,则本节也适用。Ribbon中的中心概念是指定客户的概念。每个负载均衡器都是组件的一部分,这些组件可以一起工作以按需联系远程服务器,并且该组件具有您作为应用程序开发人员提供的名称(例如,使用@FeignClient批注)。根据需要,Spring Cloud通过使RibbonClientConfiguration为每个命名的客户端创建一个新的集合作为ApplicationContext。其中包含ILoadBalancer,RestClient和ServerListFilter。
1引入jar
pom.xml
org.springframework.cloud spring-cloud-starter-netflix-ribbon
2.数据库easy code插件生成各个层
3添加application.yml配置
4
5
6.设置接口内容
@Service(“carService”)
public class CarServiceImpl extends ServiceImpl<CarDao, Car> implements CarService {
//依赖注入
@Resource
private RestTemplate restTemplate;
/** * 根据订单编号查询订单对象 * @param orderId * @return */ public R getOrderById(Integer orderId){ //注意: 1, http后的服务名称必须是想调用的服务名称 // 2,服务名称后的路径必须和远程方法的路径 // 3,请求方式必须和远程资源方式一致 // 4, 返回值也必须和远程方法返回值一致 /*restTemplate.postForObject(); restTemplate.delete(); restTemplate.put();*/ return restTemplate.getForObject("http://MemberServer/order/selectOne?id="+orderId,R.class); } /** * 重写的根据编号获取Car对象方法 * @param id * @return */ @Override public Car getById(Serializable id) { Car car = this.baseMapper.selectById(id); // int orderId = car.getOrderID; //this.getOrderById(orderId); R resultR = this.getOrderById(1); car.setR(resultR); return car; }
7.轮询,随机配置
@Configuration
public class RibbonConfiguration {
//实例化bean,交给容器管理
@Bean//相当于过去的
@LoadBalanced //当使用RestTemplate调用远程接口的时候使用负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
//实例化IRule的实现类,指定负载均衡策略
@Bean
public IRule iRule()
{
//随机
//return new RandomRule();
//轮询
return new RoundRobinRule();
}
}
8.客户端controller修改
@GetMapping("/selectOne")
public R selectOne(Integer id) {
Order order = this.orderService.getById(id);
order.setCarId(14221);
order.setOrderno(“服务器member_server_a”);
return success(order);
}
10.登陆客户端localhost:http://localhost:14222/swagger-ui/index.html
F服务注册中心:http://localhost:8848/nacos
ribbon:localhost:14231/car/selectOne/1
观察轮询随机即可