как читать только определенные сообщения очереди на основе свойства заголовка сообщения

У меня есть список сообщений в очереди 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);

person Dkr    schedule 21.07.2015    source источник


Ответы (1)


Используйте селекторы сообщений на потребителе. Селектор — это SQL-подобный запрос. Таким образом, вы можете написать что-то вроде myCustomHeader = 123. Вот неплохая шпаргалка.

Поскольку вы отметили вопрос с помощью apache-camel, я думаю, вы работаете с настройкой Camel. В этом случае вам нужно предоставить селектор Camel. Что-то вроде from("activemq:queue:myqueue?selector=myCustomHeader%3D123")..

person Petter Nordlander    schedule 21.07.2015
comment
вы имеете в виду, используя ConsumerTemplate.? - person Dkr; 22.07.2015
comment
Ну, вы отметили вопрос Camel, так что я подумал, что вы его использовали. Селекторы можно использовать в простых java/jms, а также с потребителями на основе Spring... или в большинстве/всех фреймворках с поддержкой jms. - person Petter Nordlander; 22.07.2015
comment
Да, я использую camelContext. Но я этого не понял. Я обновил вопрос с кодом, не могли бы вы уточнить. Благодарю. - person Dkr; 23.07.2015