如何在 apache ActiveMQ 中管理消息

How to manage messages in apache ActiveMQ

我将 Apache ActiveMQ 嵌入到我的 java 8 服务器端项目中。它工作正常,我能够发送和使用来自预配置队列的消息。我现在需要能够根据请求以编程方式从队列中删除消息。阅读一些文档后,我发现 Apache ActiveMQ 有一个名为 Artemis 的子项目,它似乎提供了所需的功能。但我对如何去做有点困惑。 Artemis 是 ActiveMQ 之上的插件吗,我只需要添加所需的依赖项并使用这些工具,或者它是一个单独的产品,它不适用于 Active MQ,而是作为一个独立的产品。如果是这样,我如何在 Active MQ 中管理单个消息(特别是删除请求的消息)?

首先,“ActiveMQ Artemis”是 ActiveMQ 项目中的一个子项目,它代表一个全新的代理,其底层架构与主 ActiveMQ 代理完全不同。你会运行其中之一。

要管理 ActiveMQ 代理中的消息,您可以使用 JMX Mamagement API 及其公开的 Queue#remove 方法来删​​除特定消息。这可以使用消息 ID 或更广泛地使用消息选择器来完成,以在需要时捕获多个消息。 JMX API 也通过 Jolokia 公开,因此如果您愿意,您可以通过简单的 REST 调用而不是 JMX 方式来管理代理。

无论如何,代理上的这种消息级别管理在消息传递世界中有点反模式。如果您发现自己需要将代理视为数据库,那么您应该问问自己为什么不使用数据库,因为代理不是数据库。通常,您会 运行 遇到更多问题,试图以这种方式管理您的消息,而不是仅仅将它们放入数据库。