当前位置: 首页 > 知识库问答 >
问题:

时间/节奏编排概念

郎俊雅
2023-03-14

在当前的应用中,我们有三个服务:

  • 发票
  • 银行转账:调用外部API,这可能需要一分钟左右的时间,具体取决于队列
  • 分类帐:创建借贷分类帐的内部微服务

为了沟通,我们有一个编配传奇。流程基本上使用发票作为协调器:

  1. 发票服务向Rabbitmq发布消息,要求支付发票X
  2. 银行转账服务监听消息,获取发票X
  3. 银行转账服务处理转账(调用银行的API)。付款成功时,向Rabbitmq发布“InVoice X已付款”的消息
  4. 发票服务监听消息“发票X已付款”
  5. 发票服务发布消息“为发票X创建分类账”并发布到Rabbitmq
  6. 账本服务从Rabbitmq监听消息“为发票X创建账本”
  7. 分类账服务创建适当的分类账日记账借方/贷方,然后发布“为发票X创建的分类账”
  8. 发票服务监听消息“为发票X创建的分类账”,然后完成(关闭)交易

问题1如果我用的是时态或cadence(只是找一下),他们不像上面那样依赖于发布订阅模式。那么我该如何实现呢?

我在想(CMIIW):

    < li >创建< code > invoice activity < li >创建< code > bank transferactivity < li >创建< code>LedgerActivity < li >创建< code > InvoicePaymentWorkflow

所有这些Workflow活动都是发票服务应用程序的一部分。但是银行转账服务和分类账服务现在提供了处理转账的应用程序接口(就银行转账而言,它实际上是外部银行账户的代理应用程序接口),分类账服务提供了创建借记/贷记日志的应用程序接口。CMIIW,在这种情况下,我们不再需要在银行转账服务和分类账服务上创建侦听器(或节奏/时间活动),我们需要提供应用程序接口。

还是我想错了?银行转账服务和分类账服务应该有一些活动?但是如果有,发票服务如何触发和安排工作流程

问题 2 但现在调用是异步的。日记账分类账的创建实际上有一些验证,有时负载很重,因此取决于队列上的消息,从消息转到 rabbitmq 到实际创建日志可能需要长达 5 分钟的时间。在 API 调用时,这将是一个超时。

问题3比赛条件如何?要按顺序创建的某些日记账。使用rabbitmq,我们可以通过某些技术(队列中的单个消费者,类似于kafka主题)来实现这一点。

问题4 另外,如何处理补偿交易?如果账本失败了,我们必须做点什么。在我们的例子中,我们必须通知某人会计,因为银行转账已经处理并且无法逆转。

问题5:对于一些子公司,当分类账失败时,我们仍然有控制权,因此我们可以补偿/提取发票金额,并将金额退还给母公司。假设我们在银行转账服务上有一个侦听器,我们如何触发补偿API?

在节奏/时间中,这是合适的用法吗?如果是,如何处理上述问题?

谢啦

共有1个答案

司徒良哲
2023-03-14

TLDR;这个用例非常适合时态,因为它极大地简化了您的代码和操作。

问题 1

我会推荐在他们的通讯服务中举办活动。因此< code>InvoiceActivity应该由发票服务托管,而< code > BankTransferActivity 应该由银行转帐服务托管。这消除了创建同步API的需要,并确保了工作流和活动实现之间的流程控制。请看这篇文章,它对此有更详细的解释。

只有在这种情况下,发票服务应用程序才会托管工作流代码。

问题 2

在相应服务中托管活动可以解决此问题。临时支持无限持续时间的活动。请注意,建议对长时间运行的活动进行心跳检测,以确保及时检测故障。

问题 3

确切的解决方案取决于确切的需求。在大多数情况下,需要特定排序的日记帐分录应该在单个工作流中进行编排。

问题4

通过确保工作流代码最终完成,使得支持补偿动作变得微不足道。这里有一个来自Java SDK样本库的传奇例子。

问题 5

只是将这个补偿逻辑作为同一个工作流的一部分。

 类似资料:
  • 有人能帮我了解以下情况吗?我有1个工人配置如下: 如果我将“最大当前工作流任务可执行文件大小”和“最大当前活动可执行文件大小”设置为 1024,则工作线程开始工作太慢。我认为增加这两个选项将有助于处理更多的活动和工作流任务,但它的工作方式不同。工作线程具有足够的 CPU/RAM,并且他根本没有过载。 从临时UI中,我能够捕捉到一些工作流在这样的历史状态下冻结了一段时间: 我还调整了这样的匹配参数:

  • 可以运行不需要连接到cadence服务器的本地活动。是否有适当的方式在本地运行工作流,以防发生cadence中断?我正在使用Go客户端。

  • 我是Cadence/Temporal的新手,想知道设计审查过程是什么样的。我的团队已经准备好进行正式的设计审查,但想知道是否有模板可以捕获Cadence/Temporal的特定信息?

  • temporal.io如何与cadenceworkflow.io?如果根据节奏工作流服务启动一个新项目,应该使用什么?

  • 小法师有一阵子没动静了,为什么又冒出来了呢?因为这次比较特殊 下午小法师正在阳台上晒太阳,看着前两天女神推荐的乌合之众,无聊了刷下 Q,看到女神在线,就去聊了两句 本来没有没想到女神每句必回,响应十分迅速 按说小法师应该十分高兴,但他却本能的感觉到了一种凉意 —— 太反常了 小心翼翼的试探: 加薪了? 没 升官了? 恋爱了?小法师已经打好还没发出去的时候 女神就自动把这个好消息告诉了小法师 小法师

  • 我有两个名为 w1 和 w2 的工人 W1主持活动A1。 如果w1出现故障,它是否会在w2上自动创建以处理服务器故障转移? 我试了一下,但是显示ActivityTimeOut错误,工作流失败。 难道我们没有其他选择来处理这样的故障转移吗? 在这种情况下,活动不会超时。由于工作机崩溃,它没有在预期时间内响应cadence服务。这是将它称为ActivityTimeOut的正确方法吗?相反,难道我们不能