问题标签 [saga]
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.
c# - 找不到字段:'NHibernate.NHibernateUtil.String'
我正在尝试使用 fluent package配置NHibernate
包。以下代码: id="NHibernate" version="4.0.0.4000" targetFramework="net451"
id="FluentNHibernate" version="2.0.1.0" targetFramework="net451"
地图代码:
错误 :
创建 SessionFactory 时使用了无效或不完整的配置。检查 PotentialReasons 集合和 InnerException 了解更多详细信息。
内部错误:{“未找到字段:'NHibernate.NHibernateUtil.String'。”}
有人可以帮忙吗。谢谢
domain-driven-design - 在 CQRS http 应用程序中实现 Saga/Process Manager
按照这个例子:https ://msdn.microsoft.com/en-us/library/jj591569.aspx (图3)
它如何适合 http 应用程序?
用户应该向 PlaceOrderController 执行 http 请求,它将发送 PlaceOrderCommand,但是 Order Process Manager 将如何向用户回答“9. Order Confirmed”?控制器如何意识到这一点,以便将此信息返回给用户?
谢谢
domain-driven-design - EventSourced Saga 实现
我已经编写了一个事件源聚合,现在实现了一个事件源传奇......我注意到两者很相似,并创建了一个事件源对象作为两者派生的基类。
我在这里看过一个演示http://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-ii-of-ii/但感觉可能存在问题,因为命令可能会丢失由于发送命令在写事务之外而导致进程崩溃?
相反,我使用的是 Greg Young 的 EventStore,当我保存 EventSourcedObject(聚合或 saga)时,顺序如下:
- Repository 获取新的 MutatingEvents 列表。
- 将它们写入流。
- 当流被写入并提交到流时,EventStore 会触发新事件。
- 我们监听来自 EventStore 的事件并在 EventHandlers 中处理它们。
我正在实现一个传奇的两个方面:
- 接收事件,这些事件可能会转换状态,而状态又可能会发出命令。
- 发出警报,在将来的某个时间点(通过外部计时器服务)我们可以被回调)。
问题
据我了解,事件处理程序不应发出命令(如果命令失败会发生什么?) - 但我可以接受上述情况,因为 Saga 是通过此事件代理控制命令创建(对事件的反应)的实际事物,并且任何命令发送失败都可以在外部处理(在外部事件处理程序中
CommandEmittedFromSaga
,如果命令失败则处理并重新发送)?还是我忘记了包装事件并将本机存储
Commands
在Events
同一个流中(与基类 Message 混合 - Saga 会同时使用命令和事件,聚合只会使用事件)?网络上还有其他用于实现事件源 Sagas 的参考资料吗?有什么我可以理智地检查我的想法的吗?
一些背景代码如下。
Saga 发出运行命令(包装在 CommandEmittedFromSaga 事件中)
下面的命令包含在事件中:
Saga 在未来某个时间点请求回调(AlarmRequestedBySaga 事件)
警报回调请求被包装在一个事件中,并将在请求的时间或之后向 Saga 回火和事件:
或者,我可以将命令和事件存储在同一基本类型消息流中
c# - NServiceBus Saga 没有注册 IPersistTimeouts 组件
我有一个自加热的 WCF 主机 (IIS),在 NServiceBus 配置期间我得到了这个异常:
抛出异常:NServiceBus.Core.dll 中的“Autofac.Core.Registration.ComponentNotRegisteredException”
附加信息:请求的服务“NServiceBus.Timeout.Core.IPersistTimeouts”尚未注册。为避免此异常,请注册组件以提供服务,使用 IsRegistered() 检查服务注册,或使用 ResolveOptional() 方法解决可选依赖项。
我正在使用具有内存持久性和MSMQ 传输的 NSB 5.2.9 。
这是我对自托管 WCF 主机 (IIS) 的配置。没有 App.config!**这在 global.asax 中的 Autofac 注册后调用:
所有端点上的配置只能通过IProvideConfiguration<>
.
在项目的属性中设置了NServiceBus.Lite配置文件,但这没有区别。
我是 NSB 的新手,我无法解释为什么会发生这种情况。我一直在寻找启用 say 的方法IPersistsTimeouts
,但是我找到的任何方法都被标记为过时并且不起作用。
编辑#1: @DavidBoike 要求的功能转储
编辑#2:
在应用大卫的建议并将配置保持在最低限度之后,我仍然只在使用 MsmqPersistence 而不是 InMemoryPersistence 时遇到异常。我还没有尝试过其他持久性存储。
此异常由具有完整总线(不是 SendOnlyBus)的 MVC 应用程序引发,配置如下:
抛出异常:NServiceBus.Core.dll 中的“System.NullReferenceException”附加信息:对象引用未设置为对象的实例。
调用堆栈:
ServiceBus.Core.dll!NServiceBus.Timeout.Hosting.Windows.TimeoutPersisterReceiver.Poll(object obj) 第 90 行 C#
MVC 中的 Autofac 配置:
同样,这发生在具有MsmqPersistence的 MVC 应用程序中,该应用程序订阅Some_Endpoint 发布的事件。上面提到的 WCF 主机最初将命令发送到该 Some_Endpoint。
rebus - 处理“saga not found”场景
Rebus 中是否有任何机制来处理通常由 saga 处理但没有与相关属性匹配的当前 saga 的消息?开箱即用,我相信这些消息只是被 Rebus 消费了,但是对于它们发生的事情没有可见性。
即 NServiceBusIHandleSagaNotFound
允许端点处理这种情况
c# - 如何在 MassTransit 3.0 中使用分散/聚集模式实现传奇
Jimmy Boagard在这里描述了一家麦当劳快餐连锁店,将其与 分散聚集模式进行了比较。
初步实施思路:
为所有食品站将获得的所有类型的 FoodOrdered 事件提供一个通用接口,然后每个食品站将能够消费/创建其各自的项目并发布一个共同的完成事件。例如:薯条和汉堡站收到一条有关薯条订单的消息,薯条站消费该订单并宣布 saga 正在侦听的 ItemDoneEvent。
最初的担忧:
由于 Saga 并不关心完成的食物类型,只是所有食物都已完成这一事实,这似乎是一个不错的解决方案。但是,在阅读此处有关共享队列的警告并注意到使用 MassTransit 3.0 删除了 Consumer.Conditional 过滤之后,感觉框架好像在说这种方法会发生“坏事(TM)”。但是我不确定如果不为厨房中的每个食品创建消息请求和响应以及关联事件,您还能如何做到这一点。例如:FriesOrdered、BurgerOrdered FriesCooked、BurgerCooked。如果您必须对厨房中的每件物品都这样做,这会非常乏味吗?
考虑到上述问题 - 这种类型的工作流的一个很好的传奇示例会是什么样子?
concurrency - NServiceBus - 2 个类使用相同的 Saga,这可能吗?
通常我会创建 1 个实现 Saga<T> 的类:
MySagaData 代码:
现在我需要在另一个类中使用相同的 Saga (Saga<MySagaData>),我们称之为 MyClass2。
如果我像下面这样实现 MyClass2: public class MyClass2 : Saga<MySagaData> { ……… }
Saga<MySagaData> 的 ACID 属性是否会出现在 MyClass1 和 MyClass2 中,就好像 Saga<MySagaData> 只会在 1 个类中使用一样?在 ACID 属性中,我包括例如回滚消息处理程序并在 MyClass1 中重试它,如果另一个类 (MyClass2) 的另一个消息处理程序刚刚提交了对 MySagaData 的更改?
c# - 单例 NServiceBus 传奇
让单个 saga 处理所有消息的正确方法是什么?
我不认为我不能指定一些message-to-saga
相关性。我可以吗?我相信这会导致“找不到传奇”错误。
一种天真的方法是在 saga 中有一些恒定的 ID,但这似乎是错误的。
cqrs - CQRS传奇管理
我正在开发基于 CQRS 原则的新软件,但我有一些疑问。我正在创建一个 Saga 来管理用户创建。每个用户都有一些一般信息(姓名、姓氏、生日)、几个地址和其他内容。“CreateUserSaga”由“CreateUserCommand”启动。处理完 CreateUserCommand 后,我想提出一个由同一个 saga 处理的“UserCreatedEvent”。在这个事件中,我想发送命令 CreateUserAddress 来注册地址。我不知道在哪里检索地址数据。我必须在 CreateUserCommand 中发送它们吗?