-
服务端通过
Tag
过滤时,同一个消费组的消费者订阅同一个Topic
只允许一个Tag
(*或者明确的一个Tag
,或者以 || 分隔的Tags
),后启动的会覆盖先启动的Tag
;不同消费组的消费者订阅同一个Topic
,允许不同组过滤不同的Tag
。 -
消息生产者发送失败重试是在同步模式下有效,发送状态失败和发送时出现特定的异常时重试,其他异常会直接抛出。失败重试需要设置重试次数和发送超时时间
-
consumeThreadMin
和consumeThreadMax
控制消费者并发的线程数,注意:由于消费者线程池使用的是无界队列,因此消费者消费线程数最多只有consumeThreadMin
个(线程池的最大线程数只有在线程池使用队列是有界队列,并且有界队列已满,并且核心线程都在运行时,线程池才会创建新的线程,直到数量等于最大线程数) -
consumeMessageBatchMaxSize
设置消费者一次消费消息的条数,注意:只有先启动producer
并且发送了消息,再启动consumer
时有效,之后producer
再发送消息时,也只能消费一条 -
在一个
JVM
中的所有消费者、生产者持有同一个MQClientInstance
,并且只会启动一次 -
消息队列的分配算法
AllocateMessageQueueAveragely
:平均分配,默认策略,推荐使用
AllocateMessageQueueAveragelyByCircle
:平均轮询分配,推荐使用
AllocateMessageQueueConsistentHash
:一致性Hash
。不推荐使用,因为消息队列负载信息不容易跟踪
AllocateMessageQueueByConfig
:根据配置,为每一个消费者配置固定的消息队列
AllocateMessageQueueByMachineRoom
:根据Broker部署机房名,对每个消费者负载不同的Broker
上的队列 -
消息队列的分配原则
消息队列的分配遵循一个消费者可以分配多个消息队列,但同一个消息队列只会分配给一个消费者,因此如果消费者个数大于消息队列数量,则有些消费者无法消费消息。注意:消费者客户端可以设置并发线程来消费一个或对个消息队列
RocketMQ实战经验
最新推荐文章于 2025-05-30 17:29:25 发布