首页 > 解决方案 > Spring 集成:拆分器到服务激活器到 http 出站网关

问题描述

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

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

拆分后,我会将它传递给一个队列以调用服务激活器,然后它将调用http outbound gateway。但是,由于它目前是单线程,因此将面临一个问题,即在 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>

日志: 线程日志

更新 2:
日志:在此处输入链接描述
Xml:在此处输入链接描述
我意识到请求将从附加的日志中获得覆盖。

标签: xmlspringspring-integration

解决方案


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

要使其真正成为多线程,您需要配置一个ExecutorChannel而不是QueueChannelafter 拆分器。

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


推荐阅读