繁体   English   中英

Java / JMS-处理失败情况时处理消息数

[英]Java/JMS - Processing number of messages with handling failure scenarios

我有一个必须处理消息数量的要求。 这些消息将由另一个进程插入到数据库表中。 我要做的就是检查数据库中的新消息,然后根据其配置将其发送给相应的客户,无论是电子邮件还是http。 在任何给定时间,消息数量可能为数千条,客户数量约为1000条。

我打算以此方式设计生产者消费者的工作方式。 就像生产者线程轮询DB一样,查找新消息并将其放入Queue中,然后工作线程读取这些消息和进程。

最初,看起来JMS是满足此要求的正确解决方案。 但是我正在寻找是否有更好的替代方案,例如ExecutorService,在以下情况下使用适合此要求的Threadpool。

  1. 如果一条消息传递失败,我将不得不至少24小时重试几次。
  2. 如果一个消息传递对客户失败,则其他消息传递也将失败。 因此,在处理该客户的下一条消息之前,我应该尝试发送第一条消息。

这意味着,如果我对所有客户的所有消息都有一个队列,那么如果一条消息失败,则将不会处理其他消息。

有人可以建议我如何最好地解决这个问题吗?

提前致谢。

您应该认真看一下Apache Camel 它使用大量内置组件(SQL,JMS,SMTP,HTTP,文件等)来处理所有线程,为您生产和使用,并且您与消费者/生产者有关的术语与Camel集成视图相匹配。

实现您所描述的操作非常简单:

from("sql:select * from table")
  .to("jms:myQueue");

看一下端点列表

使用通用JMS,重试逻辑相对容易实现:没有事务,为消息分配一个重试属性,每次重试都增加它,重试时在侦听器中暂停,在限制用完后退出。

每个客户的队列是最简单的配置。 动态队列可以帮助您帮助客户:动态地为每个客户创建队列和侦听器。

实际上,可靠地轮询数据库可能会给您带来更多挑战。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM