我正在使用 ActiveMQ,我想知道如何解决这个特定情况。
当消费者宕机时,生产者向队列发送消息。消息将保留在队列中,直到消费者运行以使用它。
现在想象我关闭了生产者,消息仍将保留在队列中。现在我运行消费者,它将尝试使用该消息,但由于生产者关闭,将无法回复生产者。
如果生产者不在,我想通过清理消息来解决这个问题。ActiveMQ 代理在停止后清理队列。我想对各个生产者的消息做同样的事情。
谢谢。
我正在使用 ActiveMQ,我想知道如何解决这个特定情况。
当消费者宕机时,生产者向队列发送消息。消息将保留在队列中,直到消费者运行以使用它。
现在想象我关闭了生产者,消息仍将保留在队列中。现在我运行消费者,它将尝试使用该消息,但由于生产者关闭,将无法回复生产者。
如果生产者不在,我想通过清理消息来解决这个问题。ActiveMQ 代理在停止后清理队列。我想对各个生产者的消息做同样的事情。
谢谢。
根据我现在从您的问题和其他评论中了解到的信息,我建议在您的消息中添加一个消息属性以识别生产者,并编写一个使用消息选择器的小实用程序从队列中读取与生产者匹配的所有消息。您可以在 Producer 停止(或崩溃)后直接运行该实用程序,这应该可以非常准确地完成您想要实现的目标。
编辑:虽然主要关注 EE,但Sun/Oracle JavaEE 教程包含一个非常好的章节,介绍了一般 JMS 编程,它从独立的生产者和消费者开始。随附的源代码包可以在此处下载,该包中准备好的可编译示例应该可以让您快速入门。
你可以通过几种方式解决它。一种是在消息上设置一个 TTL,这样它就会消失。另一种是通过 JMX 连接并使用选择器语句或使用消息的特定 MessageId 值清除队列或删除特定消息。
有关一些提示,请参阅本文。