如何在连接到rabbitmq生产者时跳过旧消息

goucqfw6  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(374)

我已经研究了消息和队列的过期和ttl策略,但我不确定这是否是完成我正在尝试的任务的最佳方法。
理想情况下,当我的消费者连接到我的发送者时,我希望跳过任何旧的、未接收的消息,只接收连接后发送的消息。在kafka中,这是通过配置消费者在开始消费更多消息之前从根本上寻找队列的末尾来实现的。与此功能等效的直接rabbitmq似乎不存在,但我不得不想象有一种更有效的方法来实现这一点,而不会使消息的ttl或过期时间非常短。
如何仅使用连接到rabbitmq生产者后收到的消息?

xtfmy6hx

xtfmy6hx1#

您可以使用使用者预取机制,即使它不是您所需要的(rabbitmq不支持后进先出afaik)。
就像上面说的,这个 makes it possible to limit the number of unacknowledged messages on a channel (or connection) when consuming (aka "prefetch count"). ```
channel.basicQos(10); // Per consumer limit
channel.basicConsume("my-queue", false, consumer);

我相信一些解决方法是将其设置为一个较低的级别,并从队列的末尾继续消费。
lnvxswe2

lnvxswe22#

最终对我们有用的是在发布过程中配置生产者,而不是配置消费者。

channel.basic_publish([other params], properties=pika.BasicProperties(expiration='1000'))

这会导致消息在一秒钟后过期,这对于我们的需要来说已经足够了。

相关问题