Producer-Consumer将远程消息队列作为生产者,将ExecutorService作为本地使用者

时间:2013-07-16 17:34:03

标签: java executorservice producer-consumer future

我有一个生产者 - 消费者的情况,我有一个远程消息队列,需要定期轮询新任务消息和执行任务的本地ExecutorService。有许多这些任务执行器轮询MQ。本地执行程序将具有固定数量的线程,具有相对固定的吞吐量。

问题是我不希望主消息循环只是继续消耗远程消息,如果它不能处理它们,但我希望它能够继续工作,如果还有更多的工作要做。我想为每个线程准备至少一个任务,但不要太多,以免让其他工作人员挨饿。

经典制片人 - 消费者。问题是ExecutorService抽象出我需要知道的一些信息(总线程数,繁忙线程数等)。在创建相应的ExecutorService时,会在启动时配置实际线程数。然后将其与远程消息队列的抽象一起注入到我的主工作循环中。

我觉得我错过了一些明显的东西。目前,我倾向于ExecutorService周围的装饰图案来跟踪计数。我很好奇是否有一个更优雅的解决方案,任何使用过的?

1 个答案:

答案 0 :(得分:2)

如果您使用ExecutorService的{​​{3}}实施,那么您将可以访问ExecutorService中缺少的所需信息(例如getActiveCount()和{{ 1}})