如何在spring-integration-aws中使用sqs-message-driven-channel-adapter

时间:2017-02-14 21:34:07

标签: spring-integration spring-cloud-aws

编辑:这是显示我的日志的要点。看来ReceiveMessage上有preSend然后inputChannel

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的{​​{1}}中:

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机制如何运作的理解是不充分的。有人可以通过提供一个简单的XML连接示例来纠正我的想法吗?

1 个答案:

答案 0 :(得分:0)

根据日志,消息由handler.AbstractMessageHandler (AbstractMessageHandler.java:115) - ServiceActivator for [org.springframework.integration.handler.MethodInvokingMessageProcessor@493f49cd]使用。虽然这可能是一个完全不同的故事。

SqsMessageDrivenChannelAdapter可以与errorChannel一起提供,以处理下游异常。默认情况下,它只会被记录。

从该适配器发送的消息如下:

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

message.getBody() String的位置。请参阅QueueMessageUtils.createMessage()

因此,请确保您的service-activator接受String作为paylaod而非任何其他类型。