[英]Transactional message processing with an Akka durable mailbox
我有一个与持久性JMS ( ActiveMQ )队列集成的Java / Akka应用程序。
PersistentQueue
包装包含批处理作业的JMS / ActiveMQ队列。 在事务中接收到消息,因此,如果服务器在作业执行过程中停机,则该作业将在重新启动时保留。 如果作业成功完成或被用户取消,则该事务将致力于永久删除消息;如果作业失败,则如果作业执行较少,则回滚事务(将消息放在队列的最前面)。超过MAX_RETRY次。
BatchManager
是与REST控制器的接口。 由于作业执行期间调用的存储过程所施加的限制,它一次只能执行一个批处理作业。 BatchManager
从控制器接收作业,并将其发送到PersistentQueue
以放入JMS队列中,然后在一个作业入队(除非正在执行另一个作业)或作业完成时,轮询PersistentQueue
以寻找新作业。
我想删除JMS队列以及处理其JMSExceptions
所有麻烦,然后将其替换为BatchManager
的持久邮箱。 问题是我不知道如何使用持久邮箱复制JMS事务-我的理解是,如果服务器在作业执行过程中停机,则该消息将永远丢失(而不是被放回到队列中等待)。 JMS队列)。
有没有一种方法可以使用Akka持久邮箱进行事务性消息处理,以使如果服务器在执行过程中关闭,消息也不会丢失?
您可以使用PersistentActor跟踪已发布和已完成的作业来实现此目的。
“分布式工人”激活器模板包含这样的工作单元管理角色。 (以及动态的工作人员注册和聚类,但即使您不感兴趣,仍然值得一看)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.