2017-02-14 6 views
2

EDIT: Вот сущность, показывающая мой журнал. Оказывается, что есть ReceiveMessage, а затем preSend на inputChannel:Как использовать переходник с поддержкой канала sqs-message-spring-integration-aws

https://gist.github.com/louisalexander/04e7d95835521efdd15455c98075e2ea

Извинения для будучи настолько плотным, но я не могу показаться, чтобы выяснить, как правильно использовать в sqs-message-driven-channel-adapter

В мой файл контекста, я настроив его так:

<int-aws:sqs-message-driven-channel-adapter 
    id="my-message-driven-adapter" sqs="sqs" queues="some-queue-of-mine" 
    max-number-of-messages="5" visibility-timeout="200" wait-time-out="10" 
    send-timeout="2000" channel="inputChannel" /> 

Я наблюдаю, что сообщения правильно делает его в some-queue-of-mine (путем удаления вышеуказанного бита кода и отправки сообщений в очередь). Затем я перезапускаю свой сервер, включив адаптер, управляемый сообщениями, и я заметил, что все сообщения потребляются из очереди, но куда они пошли? : -/

Мое ожидание, что сообщения будут направляться в DirectChannel имени inputChannel:

<int:channel id="inputChannel"/> 

что у меня есть service-activator потребляя от следующим образом:

<int:service-activator ref="myConsumer" 
    method='execute' input-channel="inputChannel" output-channel="outputChannel"> 
    <int:request-handler-advice-chain> 
     ... 
    </int:request-handler-advice-chain> 
</int:service-activator> 

Но, конечно же, Я никогда не вижу myConsumer вызова. Я полагаю, что мое понимание того, как работает механизм MessageProducer, является недостаточным. Может кто-то, пожалуйста, исправьте мое мышление, предоставив тривиальный пример проводки XML?

+0

Я предлагаю вам включить DEBUG для категории «org.springframework.integration» и попытаться выяснить, что происходит в журналах. Или просто поделитесь этим с нами, когда считаете, что ваши сообщения должны идти в 'inputChannel'. –

+0

Я отредактировал мой вопрос, чтобы поставить gist, показывающий отладчик o.s.integration –

+0

Извините, в вашем вопросе никого нет. –

ответ

0

Согласно журналам, сообщение потребляется handler.AbstractMessageHandler (AbstractMessageHandler.java:115) - ServiceActivator for [org.spr[email protected]493f49cd]. Хотя это может быть совершенно другая история.

SqsMessageDrivenChannelAdapter может поставляться с errorChannel для обработки исключений по потоку. По умолчанию он регистрируется только.

Сообщение отправлено с этого адаптера, как:

return new GenericMessage<>(message.getBody(), new SqsMessageHeaders(messageHeaders)); 

Где что message.getBody() является String. См. QueueMessageUtils.createMessage().

Итак, убедитесь, что ваш service-activator принимает String как paylaod, а не какой-либо другой тип.

+0

Это именно то, что я наблюдал. Сообщение, которое я пытаюсь внести на SQS с использованием int-aws: sqs-outbound-channel-adapter, представляет собой строку «[email protected]». Похоже, мне нужно использовать Transformer перед адаптером int-aws: sqs-outbound-channel, чтобы правильно преобразовать его в строку, а затем выполнить противоположное преобразование на входе от int-aws: sqs-message управляемый общество-канал-адаптер. Позвольте мне поработать над этим, а затем отправлю решение и примите ваш ответ. –

+0

Рассмотрите возможность использования 'ObjectToJsonTransformer' и его противоположности -' JsonToObjectTransformer': http://docs.spring.io/spring-integration/reference/html/messaging-transformation-chapter.html#_json_transformers –