我有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"/>
答案 0 :(得分:0)
您的配置看起来不正确 - 您需要在网关上使用轮询器来轮询频道以获取消息。
如果没有交易,您就无法将其留在渠道中#34;失败后;您可以使用ExpressionEvaluatingRequestHandlerAdvice
将其放回到通道中(并在其故障通道上将流转换回原始数据),但它将位于队列的尾部,而不是头部。 / p>
如果邮件存储支持事务,则可以使轮询器进行事务处理,并且失败会将邮件回滚到存储中。