消费者最佳实践

一些对用户有用的提示。

消费者Group和订阅

首先应该注意的是,不同的消费群体可以独立消费同一个主题,并且每个消费群体都有自己的消费补偿。 请确保同一组中的每位消费者订阅相同的主题。

MessageListener

顺序(Orderly)

消费者将锁定每个MessageQueue,以确保它被依次消费。 这会导致性能下降,但在关心消息顺序时非常有用。 不建议抛出异常,您可以返回ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT。

并发

顾名思义,消费者将同时消费这些消息。 建议使用它来获得良好的性能。 不建议抛出异常,您可以返回ConsumeConcurrentlyStatus.RECONSUME_LATER。

消费状态

对于MessageListener而言,目前您可以返回RECONSUME_LATER来告诉消费者,您现在不能使用它,并希望稍后重新使用它。 然后你可以继续使用其他消息。 对于MessageListenerOrderly,由于您关心订单,您不能跳过消息,但可以返回SUSPEND_CURRENT_QUEUE_A_MOMENT告诉消费者等待一会儿。

阻塞

不建议阻塞Listener,因为它会阻塞线程池,并最终可能会停止消费过程。

线程数

消费者使用ThreadPoolExecutor来处理内部消费,因此您可以通过设置setConsumeThreadMin或setConsumeThreadMax来更改它。

ConsumeFromWhere

当一个新的消费Group 建立时,需要决定是否需要消费Broker中已经存在的历史消息。 CONSUME_FROM_LAST_OFFSET将忽略历史消息,并消费之后产生的任何东西。 CONSUME_FROM_FIRST_OFFSET将消费Broker中存在的所有消息。 您也可以使用CONSUME_FROM_TIMESTAMP消费在指定的时间戳之后产生的消息。

复制(Duplication)

许多情况下可能会导致重复,例如:

  • 生产者重新发送消息(即,在FLUSH_SLAVE_TIMEOUT的情况下)
  • 消费者关闭,一些补偿不及时更新给Broker 。

所以如果你的应用程序不能容忍重复,你可能需要做一些外部的工作来处理这个问题。 例如,您可以检查数据库的主键。

results matching ""

    No results matching ""