我将Apache ActiveMQ嵌入到我的java 8服务器端项目中。它工作正常,我能够发送和使用预先配置的队列中的消息。我现在需要能够根据请求以编程方式从队列中删除消息。在阅读了一些文档后,我发现Apache ActiveMQ有一个名为Artemis的子项目似乎提供了所需的功能。但我对如何做到有点困惑。 Artemis是ActiveMQ上的插件吗?我只需要添加所需的依赖项并使用这些工具,或者它是一个单独的产品,它不能与Active MQ一起使用,而是作为一个独立的产品。如果是这样,我如何在Active MQ中管理单个消息(特别是删除请求的消息)?
答案 0 :(得分:1)
首先,' ActiveMQ Artemis'是ActiveMQ项目中的一个子项目,它代表一个全新的代理,它具有与主ActiveMQ代理完全不同的底层架构。你会跑一个或另一个。
要管理ActiveMQ代理中的消息,您可以使用它公开的JMX Mamagement API和队列#remove方法来删除特定消息。这可以使用消息ID来完成,或者更广泛地使用消息选择器来捕获多个消息(如果需要)。 JMX API也通过Jolokia公开,因此如果您愿意,可以通过简单的REST调用而不是JMX方式管理代理。
在任何情况下,代理上的这种消息级别管理在消息传递领域都是一种反模式。如果您发现自己需要将代理视为数据库,那么您应该问问自己为什么不使用数据库,因为代理不是数据库。通常,您会遇到更多问题,试图以这种方式管理您的消息,而不是仅仅将它们放入数据库中。