欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

RocketMq Consumer 最佳实践

发布时间:2024/9/30 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 RocketMq Consumer 最佳实践 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

RocketMq Consumer 最佳实践

翻译自RocketMQ官方文档

Consumer Group and Subscriptions 消费集群和订阅

第一件你应该关心的是不同的消费集群能独立的消费相同的topic,每一个都有自己的消费偏移量,需要确保在相同群组的consumer订阅了相同的的topic。

MessageListener

  • Orderly
    为了确保消费时按照顺序,这种consumer会锁住每一个MessageQueue。这会造成性能上的丢失,但是也是很有用的当你对顺序消息比较关心。不建议抛出异常,你可以返回ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT来代替抛出异常。

  • Concurrently
    这种consumer会并发的消费,为了高性能时可以使用这种。不建议抛出异常,你可以返回ConsumeConcurrentlyStatus.RECONSUME_LATER来代替抛出异常。

  • Consume Status
    对于MessageListenerConcurrently,你可以返回RECONSUME_LATER来告诉consumer你现在没有正确消费并且希望重新消费。你可以继续消费其他消息。
    对于MessageListenerOrderly,因为你关心顺序,你不能跳到下一条消息,但是你可以返回SUSPEND_CURRENT_QUEUE_A_MOMENT告诉consumer等一会。

  • Blocking
    建议不要阻塞Listener,因为这会锁住线程池,并且通常可能会导致消费进程停下。

Thread Number

consumer使用一个 ThreadPoolExecutor 来执行内部消费,你可以改变这个ThreadPoolExecutor通过两个方法setConsumeThreadMin or setConsumeThreadMax.

ConsumeFromWhere

当创建一个新的consumer集群,需要决定是否需要消费历史仍在Broker存在的消息。CONSUME_FROM_LAST_OFFSET将忽略所有的历史消息,并消费从那之后的消息。CONSUME_FROM_FIRST_OFFSET会消费所有存在于Broker的Message,你还可以选择使用CONSUME_FROM_TIMESTAMP来选择一个时间戳去决定消费从哪个时间戳之后的消息。

Duplication

很多情况可能会导致重复,比如

  • Producer重复发送(在FLUSH_SLAVE_TIMEOUT的场景)
  • Consumer 关闭没有及时更新Broker。
    需要在消费端做去重,比如在唯一主键。

总结

以上是生活随笔为你收集整理的RocketMq Consumer 最佳实践的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。