RocketMQ(Java语言开发的组件):
mq:生产者到消费者的设计模式;
生产者:往queue存放消息;
消息队列:储存消息;
消费者:消费消息;
RocketMQ优势:
①异步处理:比如解决es中冷启动的问题,mysql与redis在高并发场景下双写不一致的问题(canal),订单超时未支付的问题,秒杀场景下超买超卖的问题(redission);
②应用解耦:可以使得系统达到完全解耦;
③流量削峰:高并发情景下,消息队列可以将大量请求缓存起来,分散到很长一段时间处理,避免请求丢失或者系统被压垮;
④分布式架构:高可用,qps可达10万级,得到淘宝天猫双十一的实战稳定性验证;
RocketMQ工作流程:
发送消息的步骤:
1.创建消息生产者producer(DefaultMQProducer),并制定生产者group
2.指定Nameserver地址
3.启动producer
4.创建Message对象,指定主题Topic、消息体
5.发送消息
6.关闭生产者producer
Queue分配算法:
一个Topic中的Queue只能由Consumer Group中的一个Consumer进行消费,而一个Consumer可以同时消费多个Queue中的消息。常见的Queue分配算法有四种,分别是:平均分配策略、环形平均策略、一致性hash策略、同机房策略。这些策略是通过在创建Consumer时的构造器传进去的;
①平均分配策略
算法公式:avg=QueueCount(队列数量)/ConsumerCount(消费者数量)
若能整除,则按照avg个Queue诸葛分配Cons