Вопрос
Как настроить ActiveMQ
и
в Mule ESB 3.2
, чтобы убедиться, что это сообщение, извлеченное из очереди, в конечном итоге должным образом обрабатывается внешней службой CXF
?
Сценарий
У меня есть конечная точка CXF, которая должна принять входящее сообщение и как можно скорее передать его трем внешним службам.Назовем их EX1, EX2, EX3. Это довольно просто благодаря компоненту
, представленному в Mule 3.x.
Наиболее важным требованием всего решения является обеспечение того, чтобы каждое полученное сообщение доставлялось во все три службы CXF. В итоге мы пришли к идее помещать каждое входящее сообщение в постоянные очереди JMS
(Q1, Q2, Q3). После чтения сообщения из очереди Qn оно передается напрямую в соответствующую конечную точку EXn и, следовательно, во внешнюю службу.
Конфигурация
(я могу предоставить полную конфигурацию по запросу)
Мы настроили брокер ActiveMQ, как описано здесь , и подключили его к нашей конфигурации
. Кажется, все работает, как ожидалось, у меня есть JConsole, подключенная к моему приложению, поэтому я вижу, что сообщения имеют тип PERSISTENT и попадают в соответствующие очереди. Если все идет гладко - сообщения принимают все три службы EXn.
Тесты
Проблема возникает, когда мы выключаем одну из служб, скажем EX2, и перезапускаем весь сервер, имитируя сбой. Сообщение теряется (я думаю, оно не такое постоянное, да?). Самое любопытное, что если мы отправили 10 сообщений, когда EX2 не работает, то после перезапуска сервера 9 из них будут правильно повторно доставлены! Я думаю, что, может быть, 9 из этих 10 сообщений были правильно поставлены в очередь, в то время как одно постоянно повторно доставлялось, когда сервер выходил из строя.
Это заставляет меня думать, что конечная точка CXF не обрабатывается с поддержкой транзакций, что я не могу понять, если честно. В конце концов, я вижу, что сообщение находится в очереди, когда оно пытается быть доставлено повторно, поэтому его следует сохранить. Это явно не так, но почему?
Мои собственные попытки Я пробовал много вещей, но ни один из них не помог. Всегда теряется одно сообщение.
в потоках - не работало
- не работало
- если я помню это усугубило ситуацию Любая помощь приветствуется, спасибо.
АКТИВНАЯ КОНФИГУРАЦИЯ MQ
FLOW - отправить входящее сообщение в 3 очереди Qn
FLOW - обработать доставку от Qn к EXn
ENDPOINTS - объявление упомянутых конечных точек