Spring集成 - 读取JDBC,发送AMQP消息和COMMIT

时间:2016-12-08 11:46:07

标签: java spring jdbc spring-integration spring-amqp

我试图:

  1. 阅读数据库
  2. 发送AMQP消息
  3. 更新数据库
  4. 如果发送消息失败,则更新到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失败时,根本不会发送消息。似乎在更新后调用出站通道适配器。

    还有一个问题 - 每次我知道数据库中有什么内容时,是否有可能以编程方式触发入站通道适配器,而不是等待轮询器太长时间?

    谢谢!

2 个答案:

答案 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)松散的轮询器并建立没有队列的通道。