2015-02-09 2 views
0

Я использую JMS конечные точки и Apache ActiveMQ в моем Mule приложения (я следовал учебнику и не уверен, если я делаю то, что нужно, опираясь на JMS в качестве конечных точек)Как сохранить очередь, содержащую сообщение Java в Mule ESB?

<jms:activemq-connector name="jms-connector" brokerURL="${BrokerURL}" disableTemporaryReplyToDestinations="true" specification="1.1"/> 

<jms:endpoint connector-ref="jms-connector" exchange-pattern="one-way" name="UnsortedOrders" queue="UnsortedOrders"/>     
<jms:endpoint connector-ref="jms-connector" exchange-pattern="one-way" name="DestinationEMC" queue="DestinationEMC" />     
<jms:endpoint connector-ref="jms-connector" exchange-pattern="one-way" name="DestinationOriginal" queue="DestinationOriginal"/> 

На данный момент мне нужно авто -store (сохраняются на диске) очереди, связанные с тем, что сбой питания и другие сбои не уничтожат незавершенные процессы на вечность, и процесс продолжается, как только mule снова встает.

Я раньше использовал ObjectStore с тегом, но я не знаю, как связать его с очередью конечных точек JMS. это как я использовал ObjectStore раньше:

<spring:bean id="objectStore" class="org.mule.util.store.QueuePersistenceObjectStore"/> 




    <until-successful objectStore-ref="objectStore" maxRetries="${MaximumRetry}" secondsBetweenRetries="${RetryInterval}"> 
     <http:outbound-endpoint address="${ECMURL}" exchange-pattern="one-way">    
      <transformer ref="contentTypeTextXML"/> 
     </http:outbound-endpoint> 
    </until-successful> 

ответ

1

Вы не можете привязать хранилище объектов к конечной точке JMS. То есть - если вы не переопределите реализацию ObjectStore.

Вы можете, однако, добиться того же, используя JMS persistence. Вы должны использовать транзакции.

<jms:inbound-endpoint queue="Destination.EMC" connector-ref="jms-connector"> 
    <jms:transaction action="ALWAYS_BEGIN"/> 
</jms:inbound-endpoint> 

<http:outbound-endpoint address="${ECMURL}" exchange-pattern="one-way">    
    <transformer ref="contentTypeTextXML"/> 
</http:outbound-endpoint> 

Так, если поместить сообщение в очередь, она будет пытаться отправлять сообщения HTTP и если это не удается, он будет катиться обратно в очередь и повторите попытку. Когда все попытки были сделаны, и вызов по-прежнему не удался, сообщение возвращается в очередь с мертвой буквой, ActiveMQ.DLQ по умолчанию.

Чтобы контролировать, сколько раз сообщение будет повторено и задержка между попытками, вы можете использовать redelivery policy.

Сведения о деталях переоформления можно добавить к URL-адресу брокера. То есть

tcp://localhost:61616?jms.redeliveryPolicy.maximumRedeliveries=${MaximumRetry}&jms.redeliveryPolicy.redeliveryDelay=${RetryIntervalInMilliseconds} 

Хорошее объяснение того, как ActiveMQ обратная передача может использоваться с Mule ESB можно найти на Mule ESB blog.

+0

спасибо. хороший ответ. так что «Destination.EMC» ставит очередь на сохранение (на диске) очереди по умолчанию? я имею в виду даже при сбоях питания, я не потеряю данные, и они будут сохранены на диске? – MoienGK

+0

Да, учитывая, что вы не отключили сохранение JMS-провайдера (ActiveMQ). Наверное, нет, если вы не знаете об этом. Вы также должны отправлять постоянные сообщения (которые они по умолчанию). –

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