【发布时间】:2015-11-27 10:32:08
【问题描述】:
我有一个与持久性JMS (ActiveMQ) 队列集成的 Java/Akka 应用程序。
PersistentQueue 包装了一个包含批处理作业的 JMS/ActiveMQ 队列。在事务中接收消息,因此如果服务器在作业执行过程中出现故障,那么该作业将在重新启动时保留。如果作业成功完成或被用户取消,则提交此事务以永久删除消息,如果作业失败,则如果作业执行较少,则事务回滚(将消息放在队列的前面)超过 MAX_RETRY 次。
BatchManager 是与 REST 控制器的接口。由于作业执行期间调用的存储过程的限制,它一次只能执行一个批处理作业。 BatchManager 从控制器接收作业并将它们发送到 PersistentQueue 以放入 JMS 队列中,然后在作业入队时轮询 PersistentQueue 以获取新作业(除非另一个作业正在执行)或当工作完成。
我想删除 JMS 队列以及处理其JMSExceptions 的所有复杂性,并将其替换为BatchManager 的持久邮箱。问题是我不知道如何使用持久邮箱复制 JMS 事务 - 我的理解是,如果服务器在作业执行期间出现故障,那么该消息将永远丢失(而不是被放回队列中) JMS 队列)。
有没有办法使用 Akka 持久邮箱来实现事务性消息处理,这样如果服务器在执行过程中出现故障,消息就不会丢失?
【问题讨论】:
标签: java transactions jms akka message-queue