【问题标题】:Spring Integration - Dynamic Configuration for Pool Size, Queue Capacity for Task Executors and QueuesSpring Integration - 池大小、任务执行器和队列的队列容量的动态配置
【发布时间】:2013-03-19 19:58:36
【问题描述】:

在我的 Spring-Integration 配置中,我有队列、任务执行器。我想更改队列容量、任务执行器池大小和固定延迟。我想要一个 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"/>

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

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

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

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

    将生成 ThreadPoolExecutor 类型的 bean,名称为 messageTaskExecutor。所以,它可能被注入为:

    @Autowired @Qualifier("messageTaskExecutor") // or @Inject @Named("messageTaskExecutor")
    ThreadPoolExecutor messageTaskExecutor;
    

    之后您可以拨打messageTaskExecutor.setMaximumPoolSize

    【讨论】:

    • 好,我有多个服务激活器的多个任务执行器,它们引用相同的@bean.method(),但对于不同的输入和输出通道具有不同的池大小和队列容量。
    • 但是问题出在哪里?使用不同的限定符注入它们中的每一个。或者只是将它们全部注入 List...
    • 有没有办法让 xml 配置工作。我有大约 15 到 20 个频道、服务激活器和任务执行器。如果没有其他方法,那么我将在注释中重写配置。我阅读了有关 Message-bus 的信息,但找不到一个很好的例子,它有什么帮助吗?
    • 之前没有阅读您的评论。然后我将作为注释实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多