我有一个要求,我必须处理多少条消息。这些消息将由另一个进程插入到数据库表中。我所要做的就是检查数据库中的新消息,并根据其配置将其发送给相应的客户电子邮件或http。在任何给定时间,消息的数量可能是几千个,客户数量大约为1000个。
我计划按生产者消费者的方式设计。就像生产者线程轮询数据库中的新消息并将它们放入队列,工作线程读取这些消息和进程。
起初,看起来JMS是满足此要求的正确解决方案。但是我正在寻求更好的选择,比如ExecutorService,使用适合此要求的Threadpool给出以下场景。
这意味着如果我为所有客户的所有消息都有一个队列,那么如果一条消息失败,则其他消息将不会被处理。
有人可以给我一些关于如何最好地处理这件事的建议吗?
提前致谢。
答案 0 :(得分:1)
你应该认真看看Apache Camel。它处理所有线程,生产和销售。使用大量内置组件(SQL,JMS,SMTP,HTTP,文件等)为您消费,而围绕消费者/生产者的术语与Camel集成视图相匹配。
实现像你描述的那样简单:
from("sql:select * from table")
.to("jms:myQueue");
答案 1 :(得分:0)
使用通用JMS实现重试逻辑相对容易:没有事务,为消息分配重试属性,在每次重试时递增,在重试时暂停监听,在限制耗尽后退出。
每个客户的队列是最简单的配置。动态队列可以帮助您与客户:动态地为每个客户创建一个队列和一个监听器。
实际上可靠地轮询数据库可能会给您带来更多挑战。