我正在使用ActiveMQ,我想知道如何解决这个具体案例。
当消费者关闭时,生产者向队列发送消息。消息将保留在队列中,直到消费者正在运行以消耗它。
现在想象一下我关闭了生产者,消息将STILL保留在队列中。现在我运行消费者,它将尝试使用该消息,但是自从关闭后将无法回复生产者。
我想通过在生产者出局时清除消息来解决这个问题。 ActiveMQ Broker在停止后清除队列。我想对相应制片人的信息做同样的事情。
感谢。
答案 0 :(得分:2)
根据我现在从您的问题和其他评论中理解的内容,我建议在您的消息中添加Message Property以识别生产者,并编写一个使用Message Selector来阅读所有消息的小实用程序匹配队列中的Producer。您可以在Producer停止(或崩溃)后直接运行该实用程序,这应该非常准确地完成您想要实现的目标。
编辑:虽然主要关注EE,Sun/Oracle JavaEE Tutorial包含了一个关于通用JMS编程的非常好的章节,从独立的生产者和消费者开始。随附的源代码包可以下载here,该捆绑包中准备好的共享样本可以让您快速入门。
答案 1 :(得分:1)
你可以通过几种方式解决它。一种是在消息上设置TTL,使其消失。另一种是通过JMX连接并清除队列或使用选择器语句或消息的特定MessageId值删除特定消息。
有关提示,请参阅此article。