【问题标题】:Spring Integration: Splitter to service activator to http outbound gatewaySpring 集成:拆分器到服务激活器到 http 出站网关
【发布时间】:2019-01-15 05:38:06
【问题描述】:

我正面临多线程问题,整个流程应该在 30 秒内运行

第一个来源:200 个工作的总列表 第二个来源:拆分器通过从源 1 作业 id 单独调用第二个来源

拆分后,我会将它传递给一个队列来调用服务激活器,然后它会调用http出站网关。但是,由于它目前是单线程,它会面临一个问题,即无法在 30 秒内完成所有 200 个作业

<int:splitter input-channel="AdapterCollectTransformJobChannel" output-channel="AdapterCollectTransformJobChannelSplit" ref="processesSplitter" />

<int:channel id="AdapterCollectTransformJobChannelSplit">
    <int:interceptors>
        <int:wire-tap channel="invokeJobGeneralChannel" />
    </int:interceptors>
</int:channel>


<int:service-activator input-channel="invokeJobGeneralChannel" ref="AD001JobGeneralServiceActivator">
        <int:poller fixed-delay="0" />
</int:service-activator>

<int:gateway default-request-channel="AdapterCollectRequestChannel"
                 service-interface="adapter.ad001.AD001CollectGateway">
        <int:method name="invoke" payload-expression="#args[0]" reply-timeout="5000">
            <int:header name="Content-Type" value="application/json" />
            <int:header name="HttpMethod" value="GET" />
            <int:header expression="#args[1]" name="HttpUri" />
            <int:header expression="#args[2]" name="AccountId" />
            <int:header expression="#args[3]" name="MachineId" />
            <int:header expression="#args[4]" name="ApiName" />
        </int:method>
   </int:gateway>

日志: Thread log

更新 2:
日志:enter link description here
xml:enter link description here
我意识到该请求将从附加的日志中获得覆盖。

【问题讨论】:

    标签: xml spring spring-integration


    【解决方案1】:

    首先,invokeJobGeneralChannel 的服务激活器没有任何并行性。仅仅因为PollingConsumer 在一次调用中从队列中轮询的消息与队列中的消息一样多。因此,服务的调用发生在单个线程中。

    要使其真正成为多线程,您需要在拆分器之后配置ExecutorChannel 而不是QueueChannel

    另一方面,不清楚为什么您将http outbound gateway 视为单线程?这绝对不是真的,因为我们完全可以并行调用 REST。 请分享更多证据,为什么您认为它是单线程的。

    【讨论】:

    • 嗨,我截取了日志,其中显示当服务激活器被调用时它在不同的线程上运行,但是当它调用 http 请求时它在单线程上运行。
    • 好的!请显示更多配置,尤其是 HTTP 出站网关及其通道!当前的代码不反映日志
    • 顺便说一句,我已经在我的回答中解释了如何在队列通道的情况下实现单线程
    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多