【问题标题】:@Router in Spring Integration with annotations (request/reply)带有注释的 Spring 集成中的 @Router(请求/回复)
【发布时间】:2014-12-15 09:53:34
【问题描述】:

您能否提供在 Spring Integration 中路由消息的任何示例?按有效负载消息、标头或类似以下内容进行过滤:

<int:payload-type-router input-channel="routingChannel">
<int:mapping type="java.lang.String"  channel="channel1" />
<int:mapping type="java.lang.Integer" channel="channel2" />
</int:payload-type-router>

响应如何工作?我的意思是,如果我发送:

通道 -> 路由器 -> 变压器 -> 网关

简单,但我正在寻找类似于此示例的内容:

<int:router input-channel="inChannel" expression="payload.paymentType">
<int:mapping value="CASH" channel="cashPaymentChannel"/>
<int:mapping value="CREDIT" channel="authorizePaymentChannel"/>
<int:mapping value="DEBIT" channel="authorizePaymentChannel"/>
</int:router>

当我的网关收到消息并将响应发送到回复通道时。如何在我的路由器中告知正确的回复通道是什么?

【问题讨论】:

    标签: spring annotations integration spring-integration router


    【解决方案1】:

    @Router 方法只返回消息将被路由到的通道或通道名称。

    @Router(inputChannel="routingChannel")
    public String route(Object payload) {
        if (payload instanceof String() {
            return "channel1";
        }
        ...
    }
    

    对于第二个问题,您需要展示更多的流程; channel 的“上游”是什么?

    您可以从网关中省略reply-channel(或从其他类型的最终回复产生消费者中省略output-channel),回复将发送到消息reply-channel 标头中的通道;启动请求/回复场景的框架组件(入站网关、消息传递网关、MessagingTemplate 中的 sendAndReceive 方法)会自动设置此标头,因此您无需执行任何操作;它只是工作。

    【讨论】:

    • 谢谢加里。我试图了解回复的工作原理,但“它只是工作”非常适合我的情况。关于我的流程,我只是发送一个类型的集合。您建议的有效负载可能适用于我的场景。
    猜你喜欢
    • 2016-11-18
    • 2012-08-12
    • 2014-12-09
    • 2012-03-19
    • 2014-06-22
    • 2023-02-07
    • 2014-05-09
    • 2018-12-30
    • 2014-07-15
    相关资源
    最近更新 更多