我有一个必须处理消息数量的要求。这些消息将被另一个进程插入到数据库表中。我所要做的就是检查数据库中的新消息并将其发送给相应的客户电子邮件或http,具体取决于他们的配置。在任何给定时间,消息的数量可能是数千条,而客户数量约为 1000 人。
我打算按照生产者消费者的工作方式来设计这种方式。就像生产者线程轮询数据库中的新消息并将它们放入队列中一样,工作线程读取这些消息和进程。
起初看起来 JMS 是满足此要求的正确解决方案。但是我正在寻找是否有更好的选择,例如 ExecutorService,在以下情况下使用适合此要求的线程池。
- 如果一条消息传递失败,我将不得不重试几次,至少 24 小时。
- 如果客户的一条消息传递失败,那么其他消息传递也将失败。因此,在为该客户处理下一条消息之前,我应该尝试发送第一条消息。
这意味着如果我为所有客户的所有消息设置一个队列,那么如果一条消息失败,其他消息将不会被处理。
有人可以就我如何最好地处理这个问题给我建议吗?
提前致谢。