没有消费时如何丢弃队列消息?(ActiveMQ)

Posted

技术标签:

【中文标题】没有消费时如何丢弃队列消息?(ActiveMQ)【英文标题】:How to drop queue message when there is no consume?(ActiveMQ) 【发布时间】:2015-03-17 01:55:15 【问题描述】:

使用 ActiveMQ: 塞纳里奥: 服务器将通过队列向客户端发送许多消息。 但是,如果没有消费者(客户端),我需要将消息放入队列中

提前致谢!

【问题讨论】:

如果没有消费者,需要 ActiveMQ 丢弃队列中的所有消息。我知道这个话题是这样的,但是,我只有一个消费者。 【参考方案1】:

在每条消息上设置一个JMSExpiration 一段时间(30 秒?5 分钟?),然后在这段时间之后没有被消费的任何消息(无论是因为没有消费者还是因为消费者落后)将被发送到 DLQ。或者,如果您不想在 DLQ 中使用它,则将死信策略配置为设置 processExpired=false 或使用 Discarding DLQ 插件,两者均记录在 http://activemq.apache.org/message-redelivery-and-dlq-handling.html

【讨论】:

如果生产者不能/不会设置它...activemq.apache.org/timestampplugin.html【参考方案2】:

您可以使用非持久消息传递,如果没有活动的消费者,则消息被丢弃。

另一种选择可能是使用消息过期,因此如果消息没有从队列中消耗,则消息将在 X 周期后过期。

【讨论】:

谢谢。 hot to use none persistent ?从活跃的 MQ 主页,activemq.apache.org/persistence.html 当使用 ,这将使用 这将使代理使用 在使用 时如果使用 none persistent 不会丢弃旧消息。我有什么不对吗? @Claus,消息持久性影响代理重新启动时发生的情况,而不是仍然在线时发生的情况。也许您正在考虑主题会发生什么,但队列将保留所有消息(持久或非持久),直到它们被某些消费者消费(或者如果消息是非持久的,则直到重新启动代理)。

以上是关于没有消费时如何丢弃队列消息?(ActiveMQ)的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ-消息堆积&高可用

ActiveMQ 消息消费者不主动监听消息队列是不是有消息,只监听是是不是有消息进去消息队列

消费者没有收到来自 ActiveMQ 的消息

ActiveMQ中拉模式与推模式

JmsListener 没有收到来自 Activemq 的消息

mq中如何保证消费者顺序消费