Spring集成-池大小、任务执行器和队列的队列容量的动态配置

Spring集成-池大小、任务执行器和队列的队列容量的动态配置,spring,spring-integration,Spring,Spring Integration,在我的Spring集成配置中,我有队列、任务执行器。我想更改队列容量、任务执行器池大小和固定延迟。我希望有一个UI页面,如果有更多的消息需要处理,或者如果负载很重,我应该能够更改配置,而不必重新构建和部署应用程序 <si:service-activator input-channel="MessageChannel" ref="messageHandler" method="handleMessage" output-channel="

在我的Spring集成配置中,我有队列、任务执行器。我想更改队列容量、任务执行器池大小和固定延迟。我希望有一个UI页面,如果有更多的消息需要处理,或者如果负载很重,我应该能够更改配置,而不必重新构建和部署应用程序

<si:service-activator input-channel="MessageChannel" ref="messageHandler" 
                          method="handleMessage" output-channel="ackChannel">

    <si:poller task-executor="messageTaskExecutor" fixed-delay="1000"/>
</si:service-activator>

<task:executor id="messageTaskExecutor" pool-size="10"
queue-capacity="10" keep-alive="1" rejection-policy="CALLER_RUNS"/>
例:

<si:service-activator input-channel="MessageChannel" ref="messageHandler" 
                          method="handleMessage" output-channel="ackChannel">

    <si:poller task-executor="messageTaskExecutor" fixed-delay="1000"/>
</si:service-activator>

<task:executor id="messageTaskExecutor" pool-size="10"
queue-capacity="10" keep-alive="1" rejection-policy="CALLER_RUNS"/>


我想动态更改这些数字,并重新加载配置以获取更改。如果您能为我指出正确的方向,那就太好了。

您需要将任务执行器、队列等作为常规bean注入。然后在运行时为它们设置参数。比如说

<si:service-activator input-channel="MessageChannel" ref="messageHandler" 
                          method="handleMessage" output-channel="ackChannel">

    <si:poller task-executor="messageTaskExecutor" fixed-delay="1000"/>
</si:service-activator>

<task:executor id="messageTaskExecutor" pool-size="10"
queue-capacity="10" keep-alive="1" rejection-policy="CALLER_RUNS"/>
<task:executor id="messageTaskExecutor" pool-size="10"
     queue-capacity="10" keep-alive="1" rejection-policy="CALLER_RUNS"/>

在您只需调用

之后,您需要将任务执行器、队列等作为常规bean注入。然后在运行时为它们设置参数。比如说

<si:service-activator input-channel="MessageChannel" ref="messageHandler" 
                          method="handleMessage" output-channel="ackChannel">

    <si:poller task-executor="messageTaskExecutor" fixed-delay="1000"/>
</si:service-activator>

<task:executor id="messageTaskExecutor" pool-size="10"
queue-capacity="10" keep-alive="1" rejection-policy="CALLER_RUNS"/>
<task:executor id="messageTaskExecutor" pool-size="10"
     queue-capacity="10" keep-alive="1" rejection-policy="CALLER_RUNS"/>

在您可以调用

good之后,我为多个服务激活器设置了多个任务执行器,它们引用相同的@bean.method(),但对于不同的输入和输出通道具有不同的池大小和队列容量。但问题是什么?使用不同的限定符注入它们中的每一个。或者只是将它们全部注入列表中……xml配置无法正常工作。我有大约15到20个频道,服务激活器和任务执行器。如果没有其他方法,那么我将在注释中重写配置。我读过关于Message bus的文章,但找不到一个很好的例子。这对我有帮助吗?我之前没有读过你的评论。那么我将实现为annotation.good,对于多个服务激活器,我有多个任务执行器,它们引用相同的@bean.method(),但对于不同的输入和输出通道,池大小和队列容量不同。但是问题是什么?使用不同的限定符注入它们中的每一个。或者只是将它们全部注入列表中……xml配置无法正常工作。我有大约15到20个频道,服务激活器和任务执行器。如果没有其他方法,那么我将在注释中重写配置。我读过关于Message bus的文章,但找不到一个很好的例子。这对我有帮助吗?我之前没有读过你的评论。然后我将实现as注释。
<si:service-activator input-channel="MessageChannel" ref="messageHandler" 
                          method="handleMessage" output-channel="ackChannel">

    <si:poller task-executor="messageTaskExecutor" fixed-delay="1000"/>
</si:service-activator>

<task:executor id="messageTaskExecutor" pool-size="10"
queue-capacity="10" keep-alive="1" rejection-policy="CALLER_RUNS"/>