2014-11-16 2 views
0

У меня есть два пользователя jms, каждый в другом потоке. Я хочу использовать другой поток для агрегирования сообщений двух двух сообщений. и также необходимо сохранить идентификаторы корреляции, поскольку мне нужно разделить полезную нагрузку и отправить обратно сообщения.Совокупность двух сообщений JMS от двух разных потребителей

<flow name="integration-consumer-client1" doc:name="integration-consumer-client1"> 
    <jms:inbound-endpoint doc:name="JMS" connector-ref="Active_MQ" queue="client1.publish"/> 
    <logger message="Consumes Client One = #[payload]" level="INFO" doc:name="Logger"/> 
    <logger message="Client One Correlation = #[message.correlationId]" level="INFO" doc:name="Logger"/> 
    <vm:outbound-endpoint exchange-pattern="one-way" path="client1" doc:name="VM"/> 
</flow> 
<flow name="integration-consumer-client2" doc:name="integration-consumer-client2"> 
    <jms:inbound-endpoint doc:name="JMS" connector-ref="Active_MQ" queue="client2.publish"/> 
    <logger message="Consumes Client Two = #[payload]" level="INFO" doc:name="Logger"/> 
    <logger message="Client Two Correlation = #[message.correlationId]" level="INFO" doc:name="Logger"/> 
    <vm:outbound-endpoint exchange-pattern="one-way" path="client2" doc:name="VM"/> 
</flow> 
<flow name="integration-internetsolutionsFlow1" doc:name="integration-internetsolutionsFlow1"> 
    <scatter-gather doc:name="Scatter-Gather"> 
     <vm:inbound-endpoint exchange-pattern="one-way" path="client1" doc:name="VM"/> 
     <vm:inbound-endpoint exchange-pattern="one-way" path="client2" doc:name="VM"/> 
    </scatter-gather> 
</flow> 

Я пытался использовать разброс собрать с двумя въездными виртуальными машинами, но получает следующее сообщение об ошибке:

Вызванными: org.xml.sax.SAXParseException: CVC-комплексе-type.2.4.a: Invalid контент был найден, начиная с элемента 'vm: inbound-endpoint'. Один из «{» http://www.mulesoft.org/schema/mule/core ": аннотаций," http://www.mulesoft.org/schema/mule/core ": заказ агрегация стратегия" http://www.mulesoft.org/schema/mule/core ": резьбонарезной профиль," http://www.mulesoft.org/schema/mule/core ": абстрактно-сообщение-процессор" http://www.mulesoft.org/schema/mule/core ": абстрактно-исходящий конечная точка," http://www.mulesoft.org/schema/mule/core ": abstract-mixed-content-message-processor} '. на org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException (Unknown Source)

ответ

1

Причиной ошибки интеграционного internetsolutionsFlow1 не имеет въездного конечную точку ..

Что вы можете сделать следующее: -

Использование VM: исходящее-конечная точка же пути как от потока интеграции-потребительского client1 и интеграционного потребителя cLIENT2

Затем в интеграции-internetsolutionsFlow1

 <flow name="integration-internetsolutionsFlow1" doc:name="integration-internetsolutionsFlow1"> 
     <vm:inbound-endpoint exchange-pattern="request-response" path="Your Path" doc:name="VM" connector-ref="vmConnector" /> 
    <logger level="INFO" message="#[message.payload]" doc:name="Logger"/> 
<!-- you don't require a setter-getter here --> 
    </flow> 

Путь исходящего VM как от потока интеграции-потребителей-client1 и интеграции-потребителей-client2 должна быть такой же ..

Вам здесь не нужна сборка рассеяния .. так как оба потока будут отключать полезную нагрузку на том же пути VM. Он будет приниматься конечной точкой входа VM

+0

спасибо за ответ, я пробовал подход. проблема состоит в том, что эти два сообщения должны быть агрегированы. Я отправляю комбинированное сообщение в другой поток через jms после агрегации. то этот поток редактирует данные и отправляет их обратно в интеграцию-internetsolutionsFlow1 –

+0

Создайте пустой глобальный Arraylist, используя MEL, и добавьте в него сообщение [message.payload] после конечной точки VM ... Затем получите значение списка в любой поток ... Проверьте эту ссылку: - http://forum.mulesoft.org/mulesoft/topics/how_to_define_a_global_arraylist_or_map_varible_to_record_data –

+0

спасибо, что работает! –

Смежные вопросы