2022年7月19日
spring cloud一些小的点
1.Ribbon是客户端的负载均衡,使用discoveryClient从注册中心读取目标服务信息,对同一接口请求进行计数,使用%取余算法获取目标服务集群索引,返回获取到的目标服务信息。
2.漏桶算法,是以一个恒定的流速往外流动,水多了就直接溢出(熔断)。令牌桶,已一定的速率放入令牌,可以和漏桶达到相同的效果,同时在流量突发,且是正常可以响应的情况,可以大量放入令牌,应对突击情况。
3.eruka的缺点,需要1-3个心跳周期,才能感知到服务挂掉的情况,此时需要hystrix来搭配使用,保障能得到降级的响应。
4.Ribbon默认应该是线性轮训,也有其他的规则,比如随机,最大可用,权重等
5.Spring Event 机制,可以用来接耦,一些简单的业务不引入mq也能实现。
OrderProductEvent extends ApplicationEvent 定义事件
OrderProductListener implements ApplicationListener<OrderProductEvent> 定义监听
public void onApplicationEvent(OrderProductEvent event) {
String orderId = event.getOrderId();
long start = System.currentTimeMillis();
Thread.sleep(2000);
long end = System.currentTimeMillis();
log.info("{}:校验订单商品价格耗时:({})毫秒", orderId, (end - start));
}
/** 注入ApplicationContext用来发布事件 */
private final ApplicationContext applicationContext;
applicationContext.publishEvent(new OrderProductEvent(this, orderId)); 发布事件