SpringIntegration中的消息

时间:2016-12-15 12:57:05

标签: spring-integration

我有QueueChannel和message-store属性。它的配置

<int:channel id="channel1">
    <int:queue message-store="msgStore"></int:queue
</int:channel>

    然后我想从频道&#34; channel1&#34;发送消息使用<int-http:outbound-gateway/>

看起来如此:

<int-http:outbound-gateway
        url="someUrl"
        http-method="PUT"
        request-channel="channel1">
    <int-http:request-handler-advice-chain>
        <int:retry-advice max-attempts="3">
            <int:exponential-back-off initial="1000" multiplier="2.0" maximum="8000"/>
        </int:retry-advice>
    </int-http:request-handler-advice-chain>
</int-http:outbound-gateway>

我的问题:     如果邮件无法发送,我需要它在频道&#34; channel1&#34;中。但它总是从频道中删除。     它是如何保留在频道中的?

EDIT1。

<int:poller
    default="true"
    fixed-rate="100"
    receive-timeout="100">
 <int:transactional/>
 </int:poller>

EDIT2

 <int-jdbc:message-store
    id="msgStore" data-source="jdbcSQLiteDataSource"/>

1 个答案:

答案 0 :(得分:0)

您的配置看起来不正确 - 您需要在网关上使用轮询器来轮询频道以获取消息。

如果没有交易,您就无法将其留在渠道中#34;失败后;您可以使用ExpressionEvaluatingRequestHandlerAdvice将其放回到通道中(并在其故障通道上将流转换回原始数据),但它将位于队列的尾部,而不是头部。 / p>

如果邮件存储支持事务,则可以使轮询器进行事务处理,并且失败会将邮件回滚到存储中。