我打算使用带有固定线程池和IBM MQ消息传递的ExecutorService
来编写类似于生产者和消费者的代码。
假设作为消费者我创建了10个固定线程。如果我在消费者队列中放置10条消息,它将如何处理它? 10个消费者工作者线程将如何涵盖以下场景?
每个工作线程同步获取单个消息并处理消息?
每个消费者工作者线程都会收到所有这10条消息,例如每条消息有1个工作线程?
在上面第二个场景中读取此消息之后,每个线程如何调用执行程序服务。它是同时完成还是同步完成。
如果队列中有20条消息,那么消费者工作者线程如何获取这些消息,每个线程需要2条消息?如果每个线程需要一条消息,那么会发生什么 其他10条消息?
在处理上述场景时,有webservice调用和内部api方法调用,但这些是同步方法。如果我实现这个类来同时处理代码有什么用呢?
答案 0 :(得分:3)
如果您正在应用程序服务器(例如WebSphere)中运行,那么您可以简单地将消息驱动Bean(MDB)部署到JMS队列上,它将完全按照您所描述的内容执行。
如果您只是构建Java应用程序,那么使用ExecutorService会起作用。首先将MessageListener放在Session上,并让该侦听器的onMessage()将消息的处理器(例如Runnable)提交给ExecutorService。一旦该处理器完成其工作,它应该确认()该消息。
答案 1 :(得分:0)
当你拥有像JMS这样的好工具已经实现,调试,支持许多功能并且支持框架(比如Spring)时,我认为实现生产者/消费者方案并不是一个好主意。
不要发明轮子!