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

访问saga存储库

郭翰翮
2023-03-14

我需要从消费者内部访问saga存储库,以读取与正在消费的消息相关的saga的当前状态。

场景:我有一个外部服务,当这个服务使用来自传奇的事件时,我想看看传奇是否仍然处于正确的状态,因为如果同时传奇改变了状态,消费者必须跳过事件。

如何:我当然可以通过使用它的本机框架来查询选择的saga存储库实现,但是我想使用一个抽象,一个接口,从消费者内部加载saga状态,以便将来能够切换到不同的存储库实现。

感谢您的帮助。

共有1个答案

邓才
2023-03-14

如果故事启动了命令,并将其发送给消费者,消费者为什么需要检查故事的状态?在发送命令和使用者能够处理命令之间是否存在长时间延迟?

您所询问的检查类型在某种程度上与系统在处理命令时通常会做的事情背道而驰。如果您确实需要进行这种类型的检查,我实际上建议使用请求客户端进行请求/响应交互,如果命令仍然有效,saga将对其进行响应。这样,传奇存储库的逻辑(和锁定)仍在传奇的控制之下。

如果需要,可以为该请求使用单独的endpoint,以确保它没有备份到针对该传奇的其他消息后面。如果需要,请发表评论,我会更新答案。

 类似资料:
  • 下面是一个简单的场景: 用户单击“Create order”:将创建一个订单(首先保持其状态=NEW) 用户完成订单填写后,单击SAVE-->state is now Submited 当另一个检查订单并验证它时,必须进行一个过程。只有在调用了其他一些服务并给予许可时,才会验证该订单。 整个工作流程是: null null 谢谢

  • 我在vue文件中的“方法”中有这个 我得到以下错误:未捕获(在promise中)TypeError:无法读取未定义的属性'$store'

  • 我正在尝试将应用程序在Azure上投入生产。此应用程序由一个webapp(运行Docker容器)组成,该应用程序应该与Azure存储帐户(blob)通信。 将Web应用的所有出站IP地址添加到我的存储帐户的防火墙设置后,我仍然没有访问Blob的权限。错误如下:“此请求无权执行此操作。” 然而,当我在本地运行我的应用程序,并将我的本地IP添加到这些相同的防火墙设置中时,它可以工作。当我没有将其添加到

  • 我正在尝试编写一个Java程序,将Vault导出数据下载到Google云存储桶中,因为导出数据在两周后被删除。Vault数据与典型的GCS存储桶和对象标识关联,因此可能存储在GCS中。似乎有两个Java客户端库,com。谷歌。云存储和com。谷歌。应用程序编程接口。服务。存储,它似乎完成了我需要的功能,但以不同的方式工作,并使用不同的身份验证源(凭据对象)。如果我使用com。谷歌。应用程序编程接口

  • 我试图使用Windows Azure开发多层云应用程序。为了存储数据,我选择了Azure存储表和Azure存储Blob。 我的应用程序的不同层使用同一组功能,但方式不同。e、 g.他们都必须能接触斑点。我决定使用单类库来访问Windows Azure Blob存储,但我遇到了一个400错误。 当我直接从工作者角色连接到blob时,它工作正常,但当我从类库调用类时,它失败,状态代码为400(请求错误

  • 我没有找到任何关于在前端端实现逻辑来管理Azure密钥库的可能性的信息。同时,我创建了一个Node JS服务器项目使用ENV来管理Azure Key Vault,它工作成功,但我想在我的Angular应用程序中得到同样的效果。