春季集成:拆分器到服务激活器到http出站网关

时间:2018-08-08 04:10:35

标签: xml spring spring-integration

我遇到了多线程问题,整个过程流应该在30秒内运行

第一个来源:200个工作的总清单 第二个来源:拆分器通过从第一个来源中获取作业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
我意识到该请求将从附带的日志中得到覆盖。

1 个答案:

答案 0 :(得分:0)

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

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

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