我目前有一个配置了以下threadpool的JMSListener:
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.initialize();
我正在侦听的队列有超过100条消息,当我启动监听器时,它将处理前10条消息没有问题,然后我将获得 TaskRejectedException 异常剩下的消息。
我的意图是,如果没有可用的线程来处理所述消息,@ JmsListener不应该提取任何新消息。有谁知道这种配置是否可行?我使用的是springboot 1.5.3版本。
-TIA
答案 0 :(得分:1)
如果你不想丢失信息,你根本不应该使用遗嘱执行人;容器将在执行程序中排队后立即响应每条消息。如果系统死机,任何尚未处理的消息都将丢失。
相反,使用容器的并发设置来多线程化您的侦听器。
如果您真的必须使用遗嘱执行人并且不介意丢失消息,请在遗嘱执行人中使用呼叫者运行政策 - SELECT Q1.*, Q2.tags, Q3.image_id
FROM ( SELECT phppos_items.item_id,
phppos_items.name,
SUM(phppos_location_item_variations.quantity) as quantity
FROM `phppos_items`
LEFT JOIN `phppos_item_variations`
ON `phppos_item_variations`.`item_id` = `phppos_items`.`item_id`
LEFT JOIN `phppos_location_item_variations`
ON `phppos_location_item_variations`.`item_variation_id` = `phppos_item_variations`.`id`
and `phppos_location_item_variations`.`location_id` = 1
GROUP BY `phppos_items`.`item_id` ) as Q1
LEFT JOIN ( SELECT i.item_id,
GROUP_CONCAT(DISTINCT t.name) as tags
FROM phppos_items i
LEFT JOIN phppos_items_tags it
ON i.item_id = it.item_id
LEFT JOIN phppos_tags t
ON it.tag_id = t.id
GROUP BY i.item_id
) as Q2
ON Q1.item_id = Q2.item_id
LEFT JOIN ( SELECT item_id, MIN(image_id) as image_id
FROM phppos_item_images
GROUP BY item_id
) as Q3
ON Q1.item_id = Q3.item_id
。