1

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

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

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

  2. 每个消费者工作线程都会接收所有这 10 条消息,就像每条消息有 1 个工作线程一样?

  3. 在阅读了上述第二个场景的这条消息后,每个线程如何调用执行器服务。它是同时完成的还是同步完成的。

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

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

4

2 回答 2

3

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

如果您只是构建一个 Java 应用程序,那么使用 ExecutorService 就可以了。首先将 MessageListener 放置到 Session 上,并让该侦听器的 onMessage() submit() 将消息的处理器(例如 Runnable)发送到 ExecutorService。一旦该处理器完成其工作,它应该确认()该消息。

于 2013-08-13T22:35:02.913 回答
0

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

不要发明轮子!

于 2013-08-13T20:16:46.770 回答