功能特性 消息重试 对于有序消息:有序消息不能跳跃签收,当消费者消费消息失败后,消息队列RocketMQ会自动不断进行消息重试 (每次间隔时间为1秒),此时应用会出现消息消费被阻塞的情况。因此建议使用有序消息时,务必保证应用能够及时监控并处理消费失败的情况,避免阻塞现象的发生。 对于无序消息:消息队列RocketMQ默认允许每条消息最多重试16次。 每次重试的间隔时间如下: 第几次重试 与上次重试的间隔时间 1 10秒 2 30秒 3 1分钟 4 2分钟 5 3分钟 6 4分钟 7 5分钟 8 6分钟 9 7分钟 10 8分钟 11 9分钟 12 10分钟 13 20分钟 14 30分钟 15 1小时 16 2小时 如果消息重试16次后仍然失败,消息将不再投递。如果严格按照上述重试时间间隔计算,某条消息在一直消费失败的前提下,将会在接下来的4小时46分钟之内进行16次重试,超过这个时间范围消息将不再重试投递。 消息过滤 消费者订阅了某个Topic后,消息队列RocketMQ会将该主题中的所有消息投递给消费者。若消费者只需要关注部分消息,可通过设置过滤条件在消息队列RocketMQ版服务端进行过滤,只获取到需要关注的消息子集,避免接收到大量无效的消息。 消息过滤主要通过以下几个关键流程实现: 生产者:生产者在初始化消息时预先为消息设置一些属性和标签,用于后续消费时指定过滤目标。 消费者:消费者在初始化及后续消费流程中向服务端上报需要订阅指定主题的哪些消息,即过滤条件。 服务端:消息队列RocketMQ服务端根据消费者上报的过滤条件的表达式进行匹配,将符合条件的消息投递给消费者进行消费。 消息队列RocketMQ支持两种过滤方式: 通过Tag进行过滤:生产者在发送消息时,设置消息的Tag标签,消费者通过 Tag标签指定需要消费的信息。 通过SQL属性过滤:通过生产者为消息设置的属性(Key)及属性值(Value)进行匹配。生产者在发送消息时可设置多个属性,消费者订阅时可设置SQL语法的过滤表达式过滤多个属性。
来自: