spring 以并发方式集成处理消息
spring integration processing messages in a concurrent manner
我正在尝试使用 spring 集成设置我的应用程序,作为新手,需要有关以下用例的建议 -
有一个队列正在推送来自另一个应用程序的消息。我的应用程序使用队列中的消息,进行一些数据处理,然后将其推送到另一个出站队列。目标是以并发方式处理消息。
根据我的理解,我们可以有 2 种方法-
1- 使用#Poller
<int:service-activator ref="messageProcessor" method="process" input-channel="incomingChannel">
<int:poller fixed-rate="100" task-executor="executor" />
<int:service-activator/>
<task:executor id="executor" pool-size="10"/>
2- 使用#Dispatcher
<int:channel id="incomingChannel">
<int:dispatcher task-executor="executor"/>
</int:channel>
<int:service-activator ref="messageProcessor" method="process" input-channel="incomingChannel" />
<task:executor id="executor" pool-size="10"/>
查看基于轮询器的配置,似乎池中将有多个线程可用,获取消息并同时处理它。这里关注的是-
i) 轮询器将不必要地在后台保留 运行(资源命中)。
ii) 即使通道上有消息,也会根据固定速率浪费毫秒数(因为轮询器将在每 100 秒后获取消息)。
基于调度程序的配置似乎是消息驱动的,可能非常适合我的用例。如果我错了,请纠正我,在这种情况下,线程只负责将消息分派给订阅者。
如果是这样-
我是否需要将多个服务激活器与频道相关联?
有什么方法可以动态附加同一服务激活器配置的多个实例吗?
建议我最好的处理方法。谢谢
(i) 轮询非常轻量级;即使固定速率为 0,线程也会在通道中阻塞 1 秒(默认 - receive-timeout
);我怀疑您甚至会测量空闲轮询器使用的 cpu。
(ii) 请参阅 (i) - 减少轮询间隔将减少任何延迟。
无论如何,如果您谈论的是 JMS,您可能不想使用任何一种方法 - 如果您希望出站发送与入站消息参与同一事务(即仅在以下情况下提交删除)发送成功),您不得移交给另一个线程 - 如果您这样做,消息删除将在那时立即提交。
改为使用消息驱动的通道适配器并使用其并发设置来增加线程数;然后全程使用直接渠道。
我正在尝试使用 spring 集成设置我的应用程序,作为新手,需要有关以下用例的建议 -
有一个队列正在推送来自另一个应用程序的消息。我的应用程序使用队列中的消息,进行一些数据处理,然后将其推送到另一个出站队列。目标是以并发方式处理消息。
根据我的理解,我们可以有 2 种方法-
1- 使用#Poller
<int:service-activator ref="messageProcessor" method="process" input-channel="incomingChannel">
<int:poller fixed-rate="100" task-executor="executor" />
<int:service-activator/>
<task:executor id="executor" pool-size="10"/>
2- 使用#Dispatcher
<int:channel id="incomingChannel">
<int:dispatcher task-executor="executor"/>
</int:channel>
<int:service-activator ref="messageProcessor" method="process" input-channel="incomingChannel" />
<task:executor id="executor" pool-size="10"/>
查看基于轮询器的配置,似乎池中将有多个线程可用,获取消息并同时处理它。这里关注的是-
i) 轮询器将不必要地在后台保留 运行(资源命中)。
ii) 即使通道上有消息,也会根据固定速率浪费毫秒数(因为轮询器将在每 100 秒后获取消息)。
基于调度程序的配置似乎是消息驱动的,可能非常适合我的用例。如果我错了,请纠正我,在这种情况下,线程只负责将消息分派给订阅者。
如果是这样-
我是否需要将多个服务激活器与频道相关联?
有什么方法可以动态附加同一服务激活器配置的多个实例吗?
建议我最好的处理方法。谢谢
(i) 轮询非常轻量级;即使固定速率为 0,线程也会在通道中阻塞 1 秒(默认 - receive-timeout
);我怀疑您甚至会测量空闲轮询器使用的 cpu。
(ii) 请参阅 (i) - 减少轮询间隔将减少任何延迟。
无论如何,如果您谈论的是 JMS,您可能不想使用任何一种方法 - 如果您希望出站发送与入站消息参与同一事务(即仅在以下情况下提交删除)发送成功),您不得移交给另一个线程 - 如果您这样做,消息删除将在那时立即提交。
改为使用消息驱动的通道适配器并使用其并发设置来增加线程数;然后全程使用直接渠道。