在spring中限制@JmsListener(阻止TaskRejectedException)

问题描述 投票:0回答:1

我目前有一个配置了以下线程池的JMSListener:

    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(5);
    executor.setMaxPoolSize(10);
    executor.initialize();

我正在侦听的队列有超过100条消息,当我启动监听器时,它将处理前10条消息没有问题,然后我将获得剩余消息的TaskRejectedException异常。

我的意图是,如果没有可用的线程来处理所述消息,@ JmsListener不应该提取任何新消息。有谁知道这种配置是否可行?我正在使用springboot的1.5.3版本。

射线

spring spring-boot jms spring-jms
1个回答
1
投票

如果你不想丢失信息,你根本不应该使用遗嘱执行人;容器将在执行程序中排队后立即响应每条消息。如果系统死亡,任何尚未处理的消息都将丢失。

相反,使用容器的并发设置来多线程监听器。

如果您确实必须使用执行程序并且不介意丢失消息,请在执行程序中使用调用程序运行策略 - setRejectedExecutionHandler()

© www.soinside.com 2019 - 2024. All rights reserved.