我有一个设计问题。
当前代码首先调用DB,保存消息并立即调用MQ以将消息放入PutQueue方法。这两个调用都返回void。
我正在使用数据库和Mq来保存我的交易。当前代码首先将消息保存到DB,然后将消息放入MQ,此mq将消息放入Omni进程。
在生产中我有这样的场景,其中消息被保存到DB并且由于某些错误而没有放置MQ。在这种情况下,我的消息被保存到DB而不是在Omni进程中。我想改变我的设计,使其失败或成功。
为了进行数据库调用,我正在使用另一个服务,它只是在保存调用中返回void。在Message MQ中也是如此。如何让两者一起工作或一起失败。
如果我的问题不完整并且遗漏了任何要点,请告诉我。
答案 0 :(得分:0)
如果一切正常,您可以提交数据库和MQ。否则,回滚或什么都不做。你用的是什么数据库?您可以编写Java程序调用的存储过程。该过程可以完成所有工作......您的MQ方法也可以返回一些值,指示是否存在错误。然后,如果有错误,你可以从数据库中删除最后一条消息。有很多解决方案。
编辑:抱歉,当我写道你可以编写存储过程时,我错放了Oracle AQ和IBM MQ ......你不能这样做。但你可以做我写的其他事情。