在目前的应用程序中,我们有三个服务:
为了沟通,我们有一个编曲传奇。流程主要是使用发票作为策划者:
问题1如果我使用时间或时间(只是查找),它们不依赖于上面这样的pub子模式。那么我如何实现它呢?
我想(CMIIW):
InvoiceActivityBankTransferActivityLedgerActivityInvoicePaymentWorkflow所有这些Workflow和Activity都是发票服务应用程序的一部分。但是,银行转账服务和分类账服务现在不再依赖pub-sub,而是提供API来处理转账(就银行转账而言,它是外部银行调用的代理API ),分类账服务提供API创建借方/信用日记账。CMIIW,在这种情况下,我们不再需要在银行转账服务和分类帐服务上创建侦听器(或cadence / this活动),我们需要提供API。
还是我想错了?银行转帐业务和分类账业务应该有一些活动吗?但是,如果是这样,发票服务如何触发和安排工作流呢?
问题2,,但是现在调用是异步的。日志分类账的创建实际上有一些验证,并且有时负载很重,因此取决于队列上的消息,从消息发送到rabbitmq到实际创建日志需要5分钟的时间。在API调用中,这将是一个超时。
问题3,,以及种族状况如何?一些期刊将按顺序创建。使用rabbitmq,我们可以使用特定的技术(队列上的单个消费者,类似kafka主题)来实现这一点。
问题4,如何处理补偿事务?如果账簿失败了,我们必须做点什么。在我们的情况下,我们必须通知会计人员,因为银行转账已经处理,不能倒转。
问题5对一些补贴公司而言,当分类账失效时,我们仍有控制权,因此我们可以补偿/收回发票金额,并将金额退还给母公司。假设我们在银行转移服务上有一个侦听器,我们如何触发补偿API?
在cadence / 时间中,这是否适合使用?如果是,如何处理上述问题?
谢谢
发布于 2021-09-21 19:58:17
TLDR;这个用例非常适合时态,因为它极大地简化了代码和操作。
问题1
我建议在他们的通讯服务中主办活动。因此,InvoiceActivity应该由发票服务托管,BankTransferActivity由银行转账服务托管。这消除了创建同步API的需要,并确保了工作流和活动实现之间的流控制。请参阅更详细地解释这一点的这个职位。
只有在这种情况下,发票服务应用程序才会承载工作流代码。
问题2
在相应的服务中托管活动解决了这个问题。时态支持无限持续的活动。请注意,对于长期运行的活动,推荐心跳,以确保及时检测故障。
问题3
确切的解决方案取决于确切的需求。在大多数情况下,需要特定排序的日志条目应该从单个工作流中编排。
问题4
通过确保工作流代码最终完成,支持补偿操作变得非常简单。这是来自SAGA实例的Java示例存储库。
问题5
只需将此补偿逻辑作为同一工作流的一部分即可。
https://stackoverflow.com/questions/69267865
复制相似问题