Мул Постоянное хранилище

Я пытаюсь использовать постоянное хранилище очередей для восстановления после неожиданного сбоя. Моя версия мула 3.3.1

Я беру сообщения из очереди и вхожу в цикл "до успешного завершения". Если мул по какой-то причине останавливается, я бы хотел, чтобы сообщение было постоянным.

Вот мой соответствующий код

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

<until-successful objectStore-ref="outboundStore" 

Я не вижу сообщения в каталоге .mule. Что я делаю не так?

Извините, если вопрос не ясен.

Добавление потоков по запросу:

<flow name="InitialFlow" processingStrategy="synchronous">
    <inbound-endpoint ref="firstQueue"/>
    <until-successful objectStore-ref="outboundStore" maxRetries="6" secondsBetweenRetries="5" deadLetterQueue-ref="secondQueue" failureExpression="groovy:message.getInvocationProperty('soapResponse') == 'BAD'">
        <flow-ref name="somSubFlow" />
    </until-successful>
</flow>

<sub-flow name="someSubFlow">
<http:outbound-endpoint ref="someEndpoint" exchange-pattern="request-response" method="GET" />  
</sub-flow>

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.


person Jeet    schedule 03.06.2013    source источник
comment
Пожалуйста, предоставьте конфигурацию потока полностью. Это может помочь в решении проблемы.   -  person user1760178    schedule 03.06.2013


Ответы (1)


Используя конфигурацию, очень похожую на вашу, я могу полностью видеть сообщения, ожидающие доставки, записанные в каталоге .mule/queuestore/queuestore.

Единственное, о чем я могу думать, так это о проблеме с этим выражением groovy:message.getInvocationProperty('soapResponse') == 'BAD', которое как-то мешает обработке.

Правильно ли это выражение? Почему бы не использовать МЭЛ?

person David Dossot    schedule 03.06.2013
comment
Выражение groovy отлично работает для повторных попыток, хотя я мог бы изменить его на MEL. Нужно будет когда-нибудь разобраться с MEL :) Извините... новичок. Спасибо за ваш ответ. Я опубликую свои выводы завтра утром. - person Jeet; 04.06.2013
comment
Просто из любопытства, есть ли какие-либо конкретные настройки для vm: endpoint? Извините, у меня нет с собой моего кода, иначе я бы его предоставил. Я думаю, что мой код выглядит примерно так: ‹vm:endpoint name=firstQueue path=someFirstQueue/› - person Jeet; 04.06.2013
comment
Я удалил выражение отказа, и все же не повезло. Я хотел бы упомянуть, что я запускаю сервер Mule из STS. Будет ли это иметь какое-то отношение к этому? - person Jeet; 04.06.2013
comment
Я развернул приложение на локальном сервере мулов, и оно работает нормально! По-видимому, это не работает, когда я запускаю сервер мулов из STS. Кто-то с большим знанием может пролить немного света :) - person Jeet; 04.06.2013
comment
Нет, я начинаю из обычного Eclipse, а не из Mule Studio, и у меня есть хранилище файловой системы until-sucessful, которое работает нормально. Для ясности я бы указал шаблон обмена на конечной точке виртуальной машины. Думали ли вы больше о том, что может быть хорошим выражением неудачи для вашего случая? Возможно, проверка кода состояния HTTP-вызова вместо проверки случайной переменной потока с именем soapResponse. - person David Dossot; 04.06.2013
comment
Я попробовал HTTP-заголовок, но мне нужно повторить попытку только при недоступности службы. Если я вызываю службу A, которая, в свою очередь, вызывает службу B (вызовы SOAP), даже если служба B недоступна, мне нужно повторить попытку. Я не смог найти лучшего способа :(. Моя конечная точка vm имеет односторонний шаблон обмена. /› ‹/vm:queue-profile› ‹/vm:connector› ‹vm:endpoint name=firstQueue path=someFirstQueue exchange-pattern=односторонний коннектор-ref=vmConnector /› - person Jeet; 04.06.2013