我目前有一个配置了以下线程池的JMSListener:
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.initialize();
我正在侦听的队列有超过100条消息,当我启动监听器时,它将处理前10条消息没有问题,然后我将获得剩余消息的TaskRejectedException异常。
我的意图是,如果没有可用的线程来处理所述消息,@ JmsListener不应该提取任何新消息。有谁知道这种配置是否可行?我正在使用springboot的1.5.3版本。
射线
如果你不想丢失信息,你根本不应该使用遗嘱执行人;容器将在执行程序中排队后立即响应每条消息。如果系统死亡,任何尚未处理的消息都将丢失。
相反,使用容器的并发设置来多线程监听器。
如果您确实必须使用执行程序并且不介意丢失消息,请在执行程序中使用调用程序运行策略 - setRejectedExecutionHandler()
。