问题标签 [automatonymous]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multi-tenant - 制作 Automatonymous sagas 多租户
在 Chris Patterson的帮助下,我们成功地将我们的多租户策略与 MassTransit 集成。然而,我们在获得我们的(自动)传奇多租户时遇到了困难。我有一些有用的东西,但我对它一点也不满意。我们正在使用“每个租户的模式”数据库策略,但如果这是解决问题的最干净的方法,我们愿意为 sagas 灵活使用它。
我们在所有消息的标题上都有租户 ID。我们将其从传入消息中刮下,IConsumeContext<>
然后将其放回IPublishContext<>
传出消息中。这很好用,ISagaRepository<>.GetSaga(...)
因为它的参数之一是IConsumeContext<>
. 问题是,当我们调用其他ISagaRepository<>
方法时,它们没有IConsumeContext<>
,并且我们无法在存储库中按租户进行过滤。如果我们坚持当前的数据库策略,我们就知道租户,所以我们知道要命中什么模式。如果我们更改为拥有集中的租户表,我们必须在过滤中包括租户,因为与之相关的事物在租户之间不一定是唯一的。
根据我目前的理解,这PropertySagaLocator<,>
似乎是关键点。在它的Find(IConsumeContext<>)
方法中,我们有需要访问的租户上下文,但它没有被传递到 saga 存储库。
因此,在我目前的尝试中,我为多租户创建了一个属性 saga 定位器,它与一个专门的租户 saga 存储库一起工作,并为它提供了.Where(...)
适当使用其方法所需的租户上下文。但这就是它变得丑陋的地方。具体PropertySagaLocator<,>
类正在由 Automatonymous 实例化,因此要交换它,我必须从 Automatonymous 的边缘开始,从.StateMachineSaga(...)
扩展方法之一开始,并一直交换具体类,直到它与 MassTransit 集成通过使用PropertySagaLocator<,>
因为它是一个具体类的链,一路向下实例化彼此。我对通过 Automatonymous 进行如此深入的切割感到不舒服,但在我看来,无论我们采用“每个租户的架构”策略还是切换它,我们都需要在同一点进行集成。
另一个方面是,当使用 Automatonymous 表示法时,我们需要将租户 ID 放在传出消息.Publish(...)
中。我目前这样做的方式是使用装饰器模式ServiceBus
,目前我注入装饰的、特定于租户的服务总线的时间点是总线从消费上下文复制到实例状态时,即在我的saga 消息接收器GetHandlers()
方法的覆盖。
有没有人有如何将 Automatonymous sagas 与多租户集成的经验?我们现在所做的似乎是侵入性的,我们希望找到更自然的接缝。
masstransit - EntityFramework Saga 持久性在现有数据库中重新创建模式
我正在使用带有 Automatonymous 的 MT v3.0.17,我注意到如果数据库已经存在,则不会创建实例状态表。由于我将多个不同的自动状态机指向同一个数据库,我想指示它创建表,即使数据库存在。
如何才能做到这一点?
谢谢
masstransit - 如何在不使用 Guid 的情况下关联公共交通状态机中的事件?
我在 Masstransit 中定义了以下状态机:
如何将 OrderProvisoned 和 OrderInvoiced 事件关联到与初始 OrderCreated 事件相同的 OrderState 实例,而不在我的事件中发送 Guid 并且只使用 ordercode 属性来关联它们?如果我运行此示例,如果同时发送了 OrderProvisioned 和 OrderInvoiced,我永远不会收到 OrderFinished 事件,但是如果我将 Guid 添加到事件中并根据该 Guid 关联它们,它就会正确执行。
masstransit - MassTransit Automatonymous saga 中的条件转换
我在传奇中有一些状态并尝试实施状态检查重试,直到我在收到的消息中获得一些令人满意的值。
说,我有这样的事情:
我只能提供一个特定的状态,TransitionTo
但我希望它根据收到的消息内容进行转换,这可能吗?
masstransit - 结合到自动状态机中的时间
我正在从 MassTransit 状态机传奇发出请求并等待回复。
但是我可能会遇到两个错误:
- MyRequest.TimeoutExpired
- MyRequest.Faulted
我不在乎在哪些条件下请求没有得到满足,我希望这两种情况都会导致发布错误消息。
但是,我找不到任何方法将两个结果与or条件结合起来,因此我可以为这两个结果提供一个处理案例,而不是复制粘贴我的代码。
masstransit - 在 MassTransit 中未指定调度程序地址的 Saga 调度
我试图在 MassTransit 状态机传奇中使用调度程序而不直接指定调度程序服务地址。
我UseMessageScheduler
在总线配置中使用它,它工作正常,因为我可以context.Schedule
从我的消费者内部进行。
但是,它在 sagas 中不起作用。当我尝试做时.Schedule
,我收到此错误:
指定了请求超时,但没有指定或可用的消息调度程序
我检查了 MT 代码,我看到了这个:
那么,实际上有一个分支应该正常从配置中获取调度器地址,但是为什么不起作用呢?
masstransit - 处理多个事件的状态转换
我有一个 MassTransitStateMachine 来编排一个涉及创建多个事件的过程。
完成所有事件后,我希望状态转换到“清理”阶段。
下面是相关的状态声明和过滤函数:
因此,当状态为ImportingData时,我希望收到多个DataImported事件。每个事件都将其位置标记为已完成,以便IsAllDataImported方法可以确定我们是否应该转换到下一个状态。
但是,如果最后两个DataImported事件同时到达,则转换到CleaningUp阶段的处理程序会触发两次,我最终会尝试执行两次清理。
我可以用自己的代码解决这个问题,但我希望状态机能够管理这个问题。我做错了什么,还是我只需要自己处理争用?
c# - MassTransitStateMachine 计划中断?
使用 Azure 服务总线作为传输,但计划的消息除了从 IConsumer 内部调用时不起作用。
我花了几个小时和几天,仍然不知道发生了什么。
有人可以解释我需要做什么才能使用 azure 服务总线从状态机中获取日程安排吗?也许为什么调度消息在 IConsumer 上下文中起作用,但在其他任何地方都不起作用。
总线初始化:
然后开始:
masstransit - MassTransit 传奇状态接收意外事件
我正在使用 MassTransit.Automatonymous (版本 3.3.5 )来管理传奇,并且在状态转换后我似乎收到了意外事件。
这是我的状态设置:
我有时收到的错误是:
在 ImportTraceSetDataStateMachine 状态机的 ExtractingTiffFiles 状态期间未处理 TraceSetMetaDataRetrieved 事件
我对发生错误时应该如何工作的理解如下:
在FetchingTraceSetMetaData状态期间,有时我会收到TraceSetMetaDataRetrieved事件。发生这种情况时,运行ExtractTiffFiles方法,并转换到ExtractingTiffFiles状态。
一旦进入ExtractingTiffFiles状态,我就不会期待TraceSetMetaDataRetrieved事件,因为它是让我们进入ExtractingTiffFiles状态的原因。
两个 FetchTraceSetMetaData 和 ExtractTiffFiles 方法如下(为了简洁而截断):
发帖思考
我突然想到,也许我应该在我的 ThenAsync 语句之前有我的 TransitionTo 语句。例如
那是我做错了吗?
c# - 自动状态机,从代码生成图形
我在我的 c# 项目中使用 Automatonous 状态机。我想知道是否有一种方法可以自动获取编码状态机的图形。