C# 从c中删除activemq队列中的特定消息#

C# 从c中删除activemq队列中的特定消息#,c#,activemq,C#,Activemq,我使用NMS和apache-activemq-5.9.1使用c#和activemq进行编码。我希望在发送消息时在自定义属性中为每个消息设置唯一的guid,然后我可以按guid删除特定消息(不清除队列,只删除其中的一条消息)。我在中发现了类似的问题,但没有答案,所以我再次询问。在这方面,使用NMS API只能做两件事。第一个是删除整个目的地,如问题所示 第二种方法是使用分配了选择器的使用者,该选择器将只匹配您要丢弃的消息。消费者将接收并确认将从代理中删除的消息。只有当队列深度不太大,以至于消息存储

我使用NMS和apache-activemq-5.9.1使用c#和activemq进行编码。我希望在发送消息时在自定义属性中为每个消息设置唯一的guid,然后我可以按guid删除特定消息(不清除队列,只删除其中的一条消息)。我在中发现了类似的问题,但没有答案,所以我再次询问。

在这方面,使用NMS API只能做两件事。第一个是删除整个目的地,如问题所示

第二种方法是使用分配了选择器的使用者,该选择器将只匹配您要丢弃的消息。消费者将接收并确认将从代理中删除的消息。只有当队列深度不太大,以至于消息存储在消息存储中,并且由于ActiveMQ中的maxPageSize设置不够大而不会被分页时,这才有效

唯一的另一种解决方案是使用Jolokia提供的REST API访问ActiveMQ MBean并尝试以这种方式删除消息,但是您仍然可能遇到消息在脱机存储中,无法被分页以进行删除的问题

这里的根本问题是,您试图将ActiveMQ用作数据库,而它(或任何其他JMS代理)并不打算这样做。这是一种经常出现的反模式。如果您想以DB方式访问消息,那么使用DB,您将节省大量的时间和精力