如何根据消息头属性仅读取特定队列消息

Posted

技术标签:

【中文标题】如何根据消息头属性仅读取特定队列消息【英文标题】:how to read only specific queue messages based on message header property 【发布时间】:2015-10-11 12:08:48 【问题描述】:

我在 activemq 队列中有一个消息列表。每条消息都有一个带有值的自定义标头属性。我应该如何才能仅访问自定义标头属性值 = 123 的那些消息?

我正在使用类似下面的方法从队列中挑选消息。如何选择 customHeaderProperty =123 的所有消息或单个消息?

ConsumerTemplate consumerTemplate = camelContext.createConsumerTemplate();
Exchange ex = consumerTemplate.receive("activemq:queueName",10000);
String data = ex.getIn().getBody(String.class);
String number = ex.getIn().getHeader("customProperty", String.class);

【问题讨论】:

【参考方案1】:

在消费者上使用消息选择器。选择器是类似 SQL 的查询。所以你可以写myCustomHeader = 123之类的东西。这是pretty good cheat sheet。

由于您使用 apache-camel 标记了问题,我猜您正在使用 Camel 设置。在这种情况下,您需要将选择器提供给 Camel。类似于from("activemq:queue:myqueue?selector=myCustomHeader%3D123").

【讨论】:

你的意思是使用consumerTemplate。? 嗯,你用 Camel 标记了这个问题,所以我认为你使用了它。选择器可以在普通的 java/jms 以及基于 spring 的消费者中使用。或者大多数/所有支持 jms 的框架。 是的,我正在使用 camelContext。但我没明白。我已经用代码更新了问题,请您详细说明。谢谢。

以上是关于如何根据消息头属性仅读取特定队列消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在双工回调中读取 WCF 消息头?

rabbitmq消息积压,恶性循环解决思路

无法根据 Azure 流分析中的标头属性筛选消息

如何在活动 mq Web 控制台 localhost:8161 中发送消息的消息头(属性)?

linux进程间通信之Posix消息队列

仅读取来自 kafka 主题的特定消息