问题标签 [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.
state-machine - 如何使用存储引擎持久化 Saga 实例并避免竞争条件
我尝试使用持久化 Saga 实例RedisSagaRepository
;我想在负载平衡设置中运行 Saga,所以我不能使用InMemorySagaRepository
. 然而,在我切换之后,我注意到消费者发布的一些事件没有被 Saga 处理。我检查了队列,没有看到任何消息。
我注意到,当消费者几乎没有时间处理命令和发布事件时,它可能会发生。InMemorySagaRepository
如果我使用或添加将不会出现此Task.Delay()
问题Consumer.Consume()
我使用不正确吗?
另外,如果我想在负载平衡设置中运行 Saga,并且如果 Saga 需要使用字典发送多个相同类型的命令来跟踪完整性(类似于处理多个事件的状态转换中的逻辑)。当多个消费者同时发布事件时,如果两个 Sagas 同时处理两个不同的事件,我会出现竞争条件吗?在这种情况下,State 对象中的 Dictionary 是否会正确设置?
代码可在此处获得
SagaService.ConfigureSagaEndPoint()
InMemorySagaRepository
是我在和之间切换的地方RedisSagaRepository
LeafConsumer.Consume 是我们添加 Task.Delay() 的地方
.net-core - .Net-Core 2.2 MassTransit.ConfigurationException:状态机未正确配置
新手问题 - 我错过了什么?是否有可用的 dotnetcore 2.2 Saga 示例?
我有一个基本的端到端系统工作正常,消息在 docker-compose 中跨容器流动,但添加 Saga 似乎是一个挑战 -
问:我是否缺少调度程序依赖项?在 MassTransit 5.5.5 中,cfg.UseInMemoryMessageScheduler(); 不编译。
发生了一些奇怪的事情,我不得不将我的状态机明确标记为 ISaga
MassTransit.ConfigurationException:无法为 Model.WorkflowExecutionStateMachine 创建状态机连接器 ---> MassTransit.ConfigurationException:未正确配置状态机:workflowapi_1 | [失败] 未指定 ExecutingTask
巴士启动如下 -
异常详细信息是
未处理的异常:MassTransit.ConfigurationException:无法为 Rapid.Workflow.Api.Model.WorkflowExecutionStateMachine 创建状态机连接器 ---> MassTransit.ConfigurationException:未正确配置状态机:workflowapi_1 | [失败] ExecutingTask 未指定 workflowapi_1 | 在 Automatonymous.StateMachineConfigurationResult.CompileResults(IEnumerable 1 results)
workflowapi_1 | at Automatonymous.StateMachineConnectors.StateMachineConnector
1.StateMachineEvents()+MoveNext() workflowapi_1 | 在 System.Collections.Generic.List 1.AddEnumerable(IEnumerable
1 可枚举) workflowapi_1 | 在 System.Linq.Enumerable.ToList[TSource](IEnumerable 1 source)
workflowapi_1 | at Automatonymous.StateMachineConnectors.StateMachineConnector
1..ctor(SagaStateMachine 1 stateMachine)
workflowapi_1 | --- End of inner exception stack trace ---
workflowapi_1 | at Automatonymous.StateMachineConnectors.StateMachineConnector
1..ctor(SagaStateMachine 1 stateMachine)
workflowapi_1 | at Automatonymous.SagaConfigurators.StateMachineSagaConfigurator
1..ctor(SagaStateMachine1 stateMachine, ISagaRepository
1 个存储库,ISagaConfigurationObserver 观察者)workflowapi_1 | 在 MassTransit.AutomatonymousReceiveEndpointExtensions.StateMachineSaga[TInstance](IReceiveEndpointConfigurator 配置器,SagaStateMachine 1 stateMachine, ISagaRepository
1 存储库,Action`1 配置) workflowapi_1 | 在 Rapid.Workflow.Api.Startup.<>c.b__2_5(IRabbitMqReceiveEndpointConfigurator ep) 在 /src/Workflow.Api/Startup.cs:line 74
依赖项是
感谢您的任何提示或想法 -
masstransit - Masstransit Automatonymous:丢弃丢失 sagas 实例的事件进入错误队列
使用 Redis 的自动化:多个状态机 Sagas 使用相同的事件。当事件发布(扇出)时,不期望事件并使用 x.OnMissingInstance(x=>x.Discard()) 的 sagas,发布事件将进入错误队列。我期待它只是忽略而不将其放入错误队列。请说清楚
c# - Masstransit Sagas 和自定义活动的依赖注入问题
我正在为分布式系统实现 Saga。到目前为止,我在使用 Masstransit 文档来实现没有任何有意义行为的 Saga 时没有遇到任何问题(只是一个带有几个微服务交换消息的协调器)。
下一步是在 Automatonymous 状态机的状态更改之间添加一些行为。我有一个具有所有必需行为的服务,所以我想创建使用依赖注入的服务的海关活动。
问题是活动没有很好地解决,并引发以下错误:
该文档没有明确说明我们应该如何使用 .NET Core 的默认 DI 系统包含自定义活动。我还在 Stackoverflow、Github 存储库和Google Group中查找了这些信息。
在我的 Startup 课程中,我按照官方文档中的说明配置了 Masstransit:
如果我理解正确,我必须以某种方式使用IStateMachineActivityFactory但我真的迷失了如何继续。任何帮助将不胜感激。
entity-framework-core - 使用 Automatonymous 时状态机不一致
我是微服务的新手,并且使用自动匿名的公共交通。目前我的状态机在执行时显示不一致。Initially 内部的代码按预期工作,但在第二个事件完成后,控制流不执行 during 内部的代码。这只发生在 1 个状态机上,所有其他状态机都按预期工作。当我将代码中的代码移动到最初(最初注释代码)时,它工作正常。下面是我的状态机的样子:
下面使用 RabbitMQ 进行 Masstransit 设置
我尝试了 SetCompleted 和 SetCompletedWhenFinalized()。我们将 Masstransit v6.2.1 与自动 v4.2.1 一起使用。需要帮助来确定我们为什么会遇到此问题或实施是否有问题?
entity-framework-core - 多个使用 EFCore 持久性的自动匿名状态机不起作用
我们使用带有自动匿名和 InMemoryRepository 的 Masstransit 来实现 saga 持久性。我们配置了大约 3 个状态机并且运行良好。我们最近从 InMemoryRepository 更改为 EFCore 以实现持久性。这导致只有第一个配置的状态机可以完美运行。休息所有状态机甚至没有进入 Initially 事件。需要帮助来了解实施是否正确。以下是代码详细信息:
大众运输状态机设置
所有 3 个状态机的 DBContext 如下所示
下面的状态图
从上面的代码中,只有 ServiceRequest1RegisterStateMachine 可以正常工作,其余的状态机甚至都没有进入 Initially。我可以确认迁移都是事先完成的,并且当仅存在 1 个存储库配置时,这些状态机都可以单独正常工作,即,如果只有 ServiceRequest1ApproveStateMachine 的 repo 配置,则此状态机可以正常工作。但是如果所有 3 个 repo 配置都存在,那么只有第一个有效。我需要有关使用 EFCore 正确实现 saga 持久性的指导。我是否应该尝试使用 masstransit 文档中提到的单个 dbcontext 来实现(https://masstransit-project.com/usage/sagas/efcore.html)
masstransit - MassTransit 中的消费者传奇 vs Automatonymous
究竟什么是消费者传奇,它与 Automatonymous 有何不同?我知道 Automatonymous 是 MassTransit 使用的一个单独的库。
masstransit - 需要StateMachine的Activity例子
我正在学习 MassTransit 的 StateMachine,它对我的用例很有帮助,非常喜欢它,现在我想了解更多关于如何正确使用 Activity 但很难找到文档/示例的信息,请帮助我解决一些问题:
做什么
Probe
和Accept
方法做什么?例如:
Scope
和是什么Visitor
?
我像这样链接 2 个活动
.Activity(x=>x.OfType<FirstActivity>())
.Activity(x=>x.OfType<SecondActivity>())
在FirstActivity.Execute
方法中,它抛出异常但SecondActivity.Faulted
从未命中,如何正确设置它们?
谢谢你。
c# - 如何在 MassTransit 和 Automatonymous 中配置 EF Core 持久性?
我正在尝试使用 EF Core 配置 Automatonymous worker 实现作为持久性。我通过 api 发布事件并使用 RabbitMq 作为传输在托管服务中处理它。不幸的是,数据库不存储机器状态。我应用了迁移并看到了 table OrderState
,但是在发布OrderSubmmited
事件后其中没有数据。它得到了正确处理,因为我在控制台中看到了一个日志,但数据库表仍然是空的。我错过了什么?
这是我的代码:
事件:
消费者:
我的传奇实例:
状态机:
数据库上下文:
节目类:
工人阶级: