如何使DB调用和MQ调用一起工作或一起失败

时间:2016-05-18 20:45:47

标签: java web-services

我有一个设计问题。

当前代码首先调用DB,保存消息并立即调用MQ以将消息放入PutQueue方法。这两个调用都返回void。

我正在使用数据库和Mq来保存我的交易。当前代码首先将消息保存到DB,然后将消息放入MQ,此mq将消息放入Omni进程。

在生产中我有这样的场景,其中消息被保存到DB并且由于某些错误而没有放置MQ。在这种情况下,我的消息被保存到DB而不是在Omni进程中。我想改变我的设计,使其失败或成功。

为了进行数据库调用,我正在使用另一个服务,它只是在保存调用中返回void。在Message MQ中也是如此。如何让两者一起工作或一起失败。

如果我的问题不完整并且遗漏了任何要点,请告诉我。

1 个答案:

答案 0 :(得分:0)

如果一切正常,您可以提交数据库和MQ。否则,回滚或什么都不做。你用的是什么数据库?您可以编写Java程序调用的存储过程。该过程可以完成所有工作......您的MQ方法也可以返回一些值,指示是否存在错误。然后,如果有错误,你可以从数据库中删除最后一条消息。有很多解决方案。

编辑:抱歉,当我写道你可以编写存储过程时,我错放了Oracle AQ和IBM MQ ......你不能这样做。但你可以做我写的其他事情。