首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用rabbitMQ的任务队列

使用rabbitMQ的任务队列
EN

Stack Overflow用户
提问于 2019-02-08 09:38:34
回答 1查看 365关注 0票数 0

我们有一个从银行系统接收发票付款信息的系统。它的工作原理是:

  1. 发票是在我们的系统中创建的。
  2. 发票的付款通过银行系统进行。银行系统要求我们系统提供发票详细信息,并返回发票详细信息。
  3. 银行系统经过支付过程,并将支付细节发送到我们的系统,它将等待确认消息30秒。如果银行系统在30秒内没有收到确认消息,银行取消付款,但不通知我们的系统取消。
  4. 我们的系统接收支付信息,并保存付款。然后将确认信息发送给银行。但有时,由于网络或系统问题,确认消息将不会在30秒内传递,我们变得不知道取消的消息状态。

因此,问题是我们的系统节省了付款,但有时无法及时响应付款确认请求(30秒内),在这种情况下,银行取消付款,我们的系统不知道付款被取消。

我已经开发了一个解决方案,如果付款成功(在收到付款30秒后),通过发送请求检查付款方法银行提供的付款方法,可以检查每笔付款。任务(将支付id发送到银行系统的check_payment方法--它返回支付状态)使用Spring框架的线程池在单独的线程中执行。但我担心这不是最好的解决方案,因为在发生网络故障时,可能会出现大量线程池。

你会推荐什么解决方案?我们可以在这个问题上使用RabbitMQ吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-16 01:17:32

实际上,您正在实现有状态编排。我建议研究能够以最小的努力支持您的用例的Cadence工作流

与使用队列进行任务处理相比,Cadence提供了许多其他优势。

  • 构建了具有无限过期间隔的指数重试。
  • 故障处理。例如,如果两个更新在配置的间隔内都不能成功,则可以执行通知另一个服务的任务。
  • 支持长时间运行心跳操作
  • 能够实现复杂的任务依赖关系。例如,在无法恢复的故障(佐贺)情况下实现调用链接或补偿逻辑。
  • 提供更新当前状态的完全可见性。例如,在使用队列时,您知道队列中是否有一些消息,并且需要额外的DB来跟踪整个进度。有了卡丹斯,每件事都被记录下来。
  • 能够取消飞行中的更新。

请参阅介绍,它超越了Cadence编程模型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54589517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档