当前位置: 首页 > 知识库问答 >
问题:

如果producer关闭,如何清理队列中的消息

尹雅健
2023-03-14

我正在使用ActiveMQ,我想知道如何解决这个具体案例。

当消费者关闭时,生产者向队列发送一条消息。该消息将保留在队列中,直到消费者运行以消费它。

现在假设我关闭了制作者,消息仍将保留在队列中。现在我运行consumer,它将尝试使用该消息,但由于消息已关闭,因此无法回复制作人。

如果制作人不在,我想通过清理消息来解决这个问题。ActiveMQ代理在停止后清理队列。我想对各自制作人的信息做同样的处理。

谢谢

共有2个答案

廉高邈
2023-03-14

你可以用几种方法来解决它。一种是在消息上设置一个TTL,使其消失。另一种方法是通过JMX连接,并使用选择器语句或消息的特定MessageId值清除队列或删除特定消息。

有关提示,请参阅本文。

乐正心水
2023-03-14

根据我现在从您的问题和其他评论中了解到的内容,我建议在您的消息中添加一个消息属性以识别生产者,并编写一个小型实用程序,该实用程序使用消息选择器从队列中读取与生产者匹配的所有消息。您可以在生产者停止(或崩溃)后直接运行该实用程序,这应该可以非常准确地完成您想要实现的目标。

编辑:虽然主要关注EE,但Sun/Oracle JavaEE教程包含一个非常好的关于通用JMS编程的章节,从独立的生产者和消费者开始。可以在此处下载随附的源代码包,该包中的准备好的示例应该可以让您很快开始。

 类似资料:
  • 鉴于以下情况: 我在本地启动zookeeper和单个kafka代理,并创建“测试”主题,如kafka快速入门中所述:https://kafka.apache.org/quickstart 然后,我运行一个简单的java程序,该程序每秒向“测试”主题生成一条消息。一段时间后,我关闭了本地的kafka代理,看到制作人继续生成消息,它没有抛出任何异常。最后,我再次启动kafka broker,produ

  • 我试图找到类似的问题,但找不到解决我问题的最佳方案。我在应用程序中使用SpringBoot,在代码中使用集成的solace队列。我可以使用以下代码读取solace队列中的消息: 在SpringBoot的帮助下,所有属性(如VPN)都从属性文件中提取,并创建ConnectionFactory。下面是读取消息的代码: 根据消息的类型,定位服务执行器并处理消息。它对我们完全有效。 但是,在某些情况下,我

  • 我使用VisualStudio代码创建了一个Azure Service Bus Queue Trigger Python函数,如果代码失败,我希望将消息返回到Service Bus队列。 我找到了一些关于一个名为unlock()和discard()的方法的信息,但我不知道如何实现它。以下是这些文档的链接: 解锁:https://docs.microsoft.com/en-us/azure/serv

  • 如何从weblogic JMS队列中清除/删除消息 我的是一个集群环境,在服务中使用。 获取以下异常。

  • 这种需求类似于通过公开的REST服务API(Spring Boot)处理来自死信队列的消息。以便一旦调用REST服务,就会从DL队列中消耗一条消息,并将再次发布到主队列中进行处理。@RabbitListener(queues=“queue_name”)立即使用消息,这在场景中是不需要的。该消息只需由REST服务API使用。有什么建议或解决办法吗?