Как убедиться это сообщение из очереди JMS доставляется во внешний WebService (CXF)?

Вопрос

Как настроить 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 не обрабатывается с поддержкой транзакций, что я не могу понять, если честно. В конце концов, я вижу, что сообщение находится в очереди, когда оно пытается быть доставлено повторно, поэтому его следует сохранить. Это явно не так, но почему?

Мои собственные попытки Я пробовал много вещей, но ни один из них не помог. Всегда теряется одно сообщение.

  1. Не использовать какие-либо теги в потоках - не работало
  2. Запуск jms-транзакции при получении сообщения, присоединение при отправке на
  3. Использование XA с JBoss и - не работало
  4. Предоставление конфигурации - если я помню это усугубило ситуацию

Любая помощь приветствуется, спасибо.

CONFIG

АКТИВНАЯ КОНФИГУРАЦИЯ MQ


    
    



    



    
    
        
            
            
            
            
        
    



    



    
    
    
    
    
    
    



FLOW - отправить входящее сообщение в 3 очереди Qn


        

        
        
            

            

            

        
        
    

FLOW - обработать доставку от Qn к EXn


        
                
        
        

        


        
            
        
    

ENDPOINTS - объявление упомянутых конечных точек


        
     


        
    

8
задан ŁukaszBachman 3 February 2012 в 09:33
поделиться