2013-09-11 3 views
1

Я новичок в Camel и хочу найти возможность фильтровать тему сообщений JMS на основе содержимого тела. Я смотрел на разные языки для фильтрации, такие как простой, OGNL, groovy и т. Д., Но не мог понять, как это можно применить для фильтрации на основе контента. Вот пример содержимого/содержимого JMS, которое мне нужно отфильтровать от -Camel Message filtering - body Фильтрация контента

"created_at":"Wed Sep 11 14:48:38 EDT 2013","text":"habra que ir pensando en cambiar el iphone...","id":"377866287525138432" 

критерии фильтрации должны быть "текст" или тело() содержит "айфона" (IgnoreCase) Что-то вроде -

from("activemq:topic:MyTopic") 
.filter().ognl(getRequest().getBody().???) 
.to("file:/abc/?fileName=abcFile.txt&autoCreate=true&fileExist=Append") 

Любые мысли/предложения будут с благодарностью.

Спасибо !!!

ответ

2

я предлагаю воспользоваться моментом, чтобы прочитать документацию Camel, например

И так как вы используете OGNL затем прочитать http://camel.apache.org/ognl.html - есть некоторые примеры. Например, обратите внимание, что сценарий OGNL должен быть предусмотрен в качестве подстроки, так что ваш пример должен быть чем-то похожи:

.filter().ognl("getRequest().getBody().contains('iphone')") 

Хотя это может возможно быть короче

.filter().ognl("request.body.contains('iphone')") 
+0

Это помогает мне в аналогичном случае. Не забудьте добавить зависимость camel-ognl, если вы используете maven. Спасибо, Клаус. – Yauhen

1

Вы также можете попробовать http://camel.apache.org/content-based-router.html для содержания основанную на маршрутизации. Это поможет, если у вас есть выбор из нескольких пунктов назначения для маршрутизации сообщения на основе содержимого.

from("jms:topic:MyTopic") .choice() .when(body().contains('iphone')) .to("direct:b") .otherwise() .to("direct:d");