我试图:
如果发送消息失败,则更新到DB也会失败。如果更新到DB失败,将多次发送消息。
<int:channel id="output-channel" />
<int-jdbc:inbound-channel-adapter query="SELECT MAX(d) AS d FROM a" update="UPDATE a SET d=1 WHERE d=367"
channel="output-channel" data-source="dataSource">
<int:poller fixed-rate="50000" max-messages-per-poll="1">
<int:transactional transaction-manager="dataSourceTransactionManager2" />
</int:poller>
</int-jdbc:inbound-channel-adapter>
<int-amqp:outbound-channel-adapter channel="output-channel" exchange-name="nameex" amqp-template="rabbitTemplate" />
使用此设置我可以看到,在UPDATE失败时,根本不会发送消息。似乎在更新后调用出站通道适配器。
还有一个问题 - 每次我知道数据库中有什么内容时,是否有可能以编程方式触发入站通道适配器,而不是等待轮询器太长时间?
谢谢!
答案 0 :(得分:1)
要在amqp发送后进行更新,请将outputChannel
设为<publish-subscribe-channel/>
。
订阅amqp出站适配器和JDBC出站适配器(或网关)。为amqp设置order="1"
,为JDBC设置order="2"
。
答案 1 :(得分:0)
1)使用jdbc出站网关i代接适配器。
<int-jdbc:outbound-gateway>
2)松散的轮询器并建立没有队列的通道。