开始
消费端能力不足,处理不过来很多的并发的消息的问题。
Qos的前提是不使用自动确认机制
实战
在order服务里面。
一次性发送50条给商家服务。
我们在商家端模拟消息可能会处理的比较慢
商家端确认之前,休眠3秒
启动服务测试。
在没有采用Qos之前。会把50条消息一股脑的推送给消费端。
我们消费端所有的消息都处在Unacked的状态。
如果多启动一个消费端来同时处理消息的话,当前已经有50条推送给了消费者1了。这样是没有改善的。
因为50条消息已经推送给了消费者1.全都堆在他的内存里。启动一个新的消费端和它一样 抢消息也抢不到。
因为这里没有ready的只能等第一个消费者把这50条消息都处理完. 所以这就是为什么不用Qos限流的缺点.
不用Qos的缺点不是说他会把线程挤爆.它的线程不一定会挤爆.但是你的消息全都堆积在了老的消费者上.
加上消费端限流
设置为同时有2条消息可以在处理中
重启应用测试.
消息只有2条一直是unacked的状态。 只有2条消息是Unacked的状态,剩下的消息是Ready的状态。ready的状态的消息,可以多开消费端来处理这些数据。抢ready的数据。临时的横向扩展可以更好的处理。这就是Qos的优点。