xml - 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>
日志: 线程日志
解决方案
首先,您的服务激活器没有任何并行性invokeJobGeneralChannel
。仅仅因为PollingConsumer
在一次调用中轮询队列中的消息与队列中的消息一样多。因此,服务的调用发生在单个线程中。
要使其真正成为多线程,您需要配置一个ExecutorChannel
而不是QueueChannel
after 拆分器。
另一方面,不清楚为什么您将http outbound gateway
其视为单线程?这绝对不是真的,因为我们完全可以并行调用 REST。请分享更多证据,为什么您认为它是单线程的。
推荐阅读
- python - 我怎样才能让我的代码重复一个动作?我使用了“for i in range(x):”,但它似乎不起作用
- poker - 有多少种不同的方法可以将一组扑克分成 6 组?解决这个问题的最简单方法是什么?
- mysql - 使用存储在两个不同表中的数据和一个表中的性别和另一个表中的购买来查找前 5 名男性和前 5 名女性购买的 sql 表
- javascript - 滑块在桌面上可以正常工作,但在移动版本中却不行,为什么?
- javascript - 是否可以让不和谐机器人向服务器添加表情符号?(discord.js)
- c# - 如何在应用程序中做教程并在 Xamarin 中首次启动时启动它?
- netty - Netty 4 中 ChannelEvent 和 CustomEvent 的替换
- ios - Fastlane iOS 突然出现错误:初始化常量 Fastlane::Actions::SharedValues::KEYCHAIN_PATH
- python - ValueError: no enough values to unpack (expected 2, got 1) custom environment
- javascript - 对象过滤的嵌套数组在 JS 中返回 undefined