【发布时间】:2019-02-08 09:38:34
【问题描述】:
我们有一个从银行系统接收发票付款信息的系统。它是这样工作的:
- 发票已在我们的系统中创建
- 发票的支付是通过银行系统完成的。银行系统向我们的系统请求发票详细信息并返回发票详细信息
- 银行系统完成支付过程,并将支付细节发送到我们的系统,它会等待确认消息30秒。如果银行系统在 30 秒内没有收到确认消息,银行会取消付款,但不会通知我们的系统取消。
- 我们的系统收到付款信息,并保存付款。然后 将确认消息发送到银行。但有时,因为网络 或系统问题,确认消息将不会在 30 内发送 几秒钟后,我们就没有意识到已取消的消息状态。
所以,问题是我们的系统保存了付款,但有时无法按时响应付款确认请求(在 30 秒内),在这种情况下,银行取消了付款,我们的系统不知道付款已取消。
我开发了一种解决方案,如果付款成功(收到付款后 30 秒后),我会通过发送检查银行提供的付款方式的请求来检查每笔付款。任务(将支付 id 发送到银行系统的 check_payment 方法 - 它返回支付状态)使用 Spring 框架的线程池在单独的线程中执行。但是恐怕这不是最好的解决方案,因为当网络发生故障时,存在线程池被填满的风险。
您会推荐哪些解决方案?我们可以使用 RabbitMQ 解决这个问题吗?
【问题讨论】:
-
我不确定 RabbitMQ 是否适合这个项目。另一方面,必须考虑部署更多可能具有潜在风险的软件产品所涉及的风险,我的意思是安全风险、漏洞。
-
请更好地说明您正在尝试解决的实际问题以及所考虑的架构。流程的哪一部分受到网络中断的负面影响?您正在并行执行哪些任务?
-
@noxdafox 感谢您的评论。我已经更新了我的答案。希望现在更清楚了。