【问题标题】:Spring integration gateway routingSpring集成网关路由
【发布时间】:2018-06-15 06:33:25
【问题描述】:

我在使用 Spring 集成时遇到问题,基本上我正在尝试创建链,它将调用多个服务中的 1 个并返回结果作为对链网关的回复以进行进一步处理。

<int:chain input-channel="inputChannel" output-channel="outputChannel">
    <int:header-enricher>
        <int:header name="temporalPayload" expression="payload"/>
        <int:header name="matcher" value="other" />
    </int:header-enricher>
    <int:gateway request-channel="routerChannel" reply-channel="replyChannel" error-channel="errorChannel"/>
    <int:transformer expression="headers.temporalPayload"/>
</int:chain>

<int:router input-channel="routerChannel" expression="headers.matcher.matches('(test)|(test2)')?headers.matcher:'other'" >
    <int:mapping value="test1" channel="channel1"/>
    <int:mapping value="test2" channel="channel2"/>
    <int:mapping value="other" channel="channel3" />
</int:router>

<int:service-activator input-channel="channel1" output-channel="replyChannel" ref="service1" method="handle"/>
<int:service-activator input-channel="channel2" output-channel="replyChannel" ref="service2" method="handle"/>
<int:service-activator input-channel="channel3" output-channel="replyChannel" ref="service3" method="handle"/>

网关没有收到服务激活器对频道“replyChannel”的回复的问题。我做错了什么?

【问题讨论】:

    标签: java spring spring-integration


    【解决方案1】:

    您可以打开org.springframework.integration 类别的 DEBUG 日志记录级别,并观察您的消息是如何传播的。

    另一方面,在大多数情况下,您不需要网关上的 reply-Channel,而只依赖网关填充的 replyChannel 标头。在这种情况下,您甚至必须删除 service-activators 上的 output-Channel。

    您的repjyChannel 的某些订阅者可能会窃取网关的消息。

    您可以尝试不使用reply-Channel 或按照我上面的建议调查日志。

    【讨论】:

    • 我打开了调试日志,发现实际上另一个链订阅了服务激活器输出通道并“窃取”网关消息。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 2021-11-23
    • 1970-01-01
    • 2012-05-21
    • 2014-07-24
    • 2021-06-16
    相关资源
    最近更新 更多