【问题标题】:Spring integration outbound-channel-adapter and database persistenceSpring集成outbound-channel-adapter和数据库持久化
【发布时间】:2015-02-05 16:34:31
【问题描述】:

我正在开发一个使用出站通道适配器将消息发布到队列的应用程序。有一个新的要求,就是消息处理过程中产生的唯一id,在成功发布到队列后,应该持久化到数据库中,而不需要等待任何回复。

有人可以建议什么是最好的方法。

这是我现有应用程序中的内容。

<int:gateway id="writerGateway" service-interface="CustomService" default-request-channel="writerChannel">
</int:gateway>

<int-jms:outbound-channel-adapter channel="writerChannel" jms-template="jmsTemplate" destination-name="${queueName}" extract-payload="true"/>

<int:channel id="writerChannel">
    <int:interceptors>
        <int:wire-tap channel="writerLogger"/>
    </int:interceptors>
</int:channel>

<int:logging-channel-adapter id="writerLogger" logger-name="writerLogger" level="INFO" expression="'Sending ' + payload?.size() + ' events'"/>

任何帮助将不胜感激。

谢谢, AK

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    writerChannel 设为&lt;publish-subscribe-channel/&gt; 并为其订阅第二个流(order="2"),例如transformer -&gt; jdbc-outbound-channel-adapter。在jms适配器上设置order="1",如果jms发送成功将调用第二个流。

    或者,使用&lt;recipient-list-router/&gt;

    【讨论】:

    • 按照建议,我将 writerChannel 更改为 publish-subscribe-channel,然后使用 后跟 。这似乎奏效了。
    • 我在这里遇到了一个问题,因为原始有效负载已转换为 XML。我可以使用 claim-check-in 来存储原始副本,但我不知道如何连接 jms-outbound-channel-adapter 和 jdbc-outbound-channel-adapter,因为它们的输入消息有不同的通道。
    • 请不要附加已经回答的问题;最好开始一个新的。您可以使用 header-enricher (&lt;header name="saveIt" expression="payload" /&gt; 将有效负载的副本保存在标头中。稍后您可以直接访问标头或使用转换器来恢复有效负载。
    猜你喜欢
    • 2016-01-27
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    相关资源
    最近更新 更多