生产者和消费组模型

首先可以创建一个生产者和消费组线程,我们再创建一个任务队列同时设置队列最大长度,在生产和消费者线程中需要给队列加锁保证原子性。消费者会从队列中获取消息,来消费消息,但是如果消息队列为空,消费者调用队列的wait方法,进入阻塞状态,防止消费者不断循环消费队列中的任务,导致CPU的资源浪费。这是消费者,生产者层面会先判断任务队列长度是否小于最大长度,小于的话notify唤醒消费者wait的队列,将消息添加入队列中。如果发现队列满了,就wait等待。当消费者消费了消息会执行notify,将该队列唤醒,添加任务进入。

image.png

幂等性

消息堆积

业务顺序消费

rocketMQ默认topic做了负载均衡,会将消息分散在不同的队列中,但是其实rocketMQ中的消息如果放在同一个队列,他是按进入的顺序存储的,消费的时候也是按照顺序进行消费。所以我们只要让生产者指定消息发送的队列,存储消息,消费者开启顺序消费就能实现业务的顺序消费。