具有消费者代码的Executor Service框架

时间:2013-08-13 20:08:17

标签: java

我打算使用带有固定线程池和IBM MQ消息传递的ExecutorService来编写类似于生产者和消费者的代码。

假设作为消费者我创建了10个固定线程。如果我在消费者队列中放置10条消息,它将如何处理它? 10个消费者工作者线程将如何涵盖以下场景?

  1. 每个工作线程同步获取单个消息并处理消息?

  2. 每个消费者工作者线程都会收到所有这10条消息,例如每条消息有1个工作线程?

  3. 在上面第二个场景中读取此消息之后,每个线程如何调用执行程序服务。它是同时完成还是同步完成。

  4. 如果队列中有20条消息,那么消费者工作者线程如何获取这些消息,每个线程需要2条消息?如果每个线程需要一条消息,那么会发生什么 其他10条消息?

  5. 在处理上述场景时,有webservice调用和内部api方法调用,但这些是同步方法。如果我实现这个类来同时处理代码有什么用呢?

2 个答案:

答案 0 :(得分:3)

如果您正在应用程序服务器(例如WebSphere)中运行,那么您可以简单地将消息驱动Bean(MDB)部署到JMS队列上,它将完全按照您所描述的内容执行。

如果您只是构建Java应用程序,那么使用ExecutorService会起作用。首先将MessageListener放在Session上,并让该侦听器的onMessage()将消息的处理器(例如Runnable)提交给ExecutorService。一旦该处理器完成其工作,它应该确认()该消息。

答案 1 :(得分:0)

当你拥有像JMS这样的好工具已经实现,调试,支持许多功能并且支持框架(比如Spring)时,我认为实现生产者/消费者方案并不是一个好主意。

不要发明轮子!