问题标签 [nservicebus-sagas]

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.

0 投票
0 回答
253 浏览

nservicebus-sagas - 未找到 NServiceBus 传奇

我有 vs 2015,NServiceBus 4.6.0.0,RavenDb 2.5。

我部署了我的软件的新版本,并且 1 个 saga 在与该 saga 相关的至少两条消息上遇到 saga not found 错误。当我们回滚发布时,消息被重新处理而没有错误。

我已经使用了一些 c# 代码来访问传奇数据并且工作正常。我们生产的 RavenDb 中有 600 多个 sagas。所以我认为这排除了 RavenDb 的问题,并消除了对导致此问题的 saga 对象树的任何更改。

所以看起来我们又回到了 NServiceBus。我不知道是什么导致这些传奇未找到错误。

任何帮助将不胜感激。

0 投票
2 回答
1635 浏览

domain-driven-design - 如何在使用 DDD 的 CQRS 架构中使用 saga?

我正在使用 DDD 设计一个 CQRS 应用程序,并且想知道如何实现以下场景:

  • 一个Participant聚合可以被多个ParticipantEntry聚合引用
  • anAddParticipantInfoCommand发给 Command 端,其中包含Participantand one的所有信息ParticipantEntry(类似于 an Orderand one OrderLineItem

应该在哪里实现检查参与者是否已经存在以及如果不存在则创建参与者的逻辑?

  • Participant是否应该在 Saga 中完成,首先检查域AddParticipantCommand模型AddParticipantEntry是否Participant ID存在
  • 这应该完全由域模型本身的聚合根来完成吗?
0 投票
1 回答
201 浏览

msbuild - 无法使用 SQL 持久性从另一个服务托管 NServiceBus Saga

我正在尝试使用 NServiceBus 6SqlPersistence和. 从另一个项目中的一个项目托管 Saga SqlDialect.MsSqlServer。在我发现的大多数示例中,Saga 与托管应用程序包含在同一个程序集中,也许这就是我苦苦挣扎的原因。

当在同一个应用程序中托管所有内容时,NServiceBus.Persistence.Sql.MsBuild包在构建过程中正确输出 Saga.sql文件,然后在运行时选择这些文件并执行它们。使用单独的应用程序,只会生成和文件Outbox,而不是 Saga 文件。然后登录运行以下条目:SubscriptionTimeout .sql

INFO NServiceBus.Persistence.Sql.Installer 目录 '[PATH]\SagaPersistence\Service\bin\Debug\NServiceBus.Persistence.Sql\MsSqlServer\Sagas' 未找到,因此不会执行 saga 创建脚本。

可以在https://github.com/WolfyUK/NServiceBusSagaSqlPersistence找到完整的 VS 2017 repro 。

首先,从另一个服务托管 Sagas 而不是自托管是不是一个坏主意?如果没有,有人可以建议解决 SQL 持久性问题的最佳方法吗?

0 投票
1 回答
455 浏览

c# - NServiceBus 传奇设计问题

在使用 NServiceBus 传奇时,我遇到了“乐观并发冲突”异常。

我的故事涵盖了一个相对简单的流程:当任何消息到达时,它都会发出很少的外部请求,并在一段时间后收集回复。

您可以在下面找到我的传奇示例。

NServiceBus 为此类流产生“乐观并发冲突”异常是正常行为吗?

我应该考虑以某种方式重新设计传奇吗?

我在用:

  • NServiceBus 6.4.2
  • NServiceBus.RabbitMQ
  • NServiceBus.Persistence.Sql
0 投票
1 回答
783 浏览

nservicebus - nservicebus sagas - 试图理解目的和好处

我已多次阅读网站上的文档。我一遍又一遍地阅读相同的文章,我无法理解他们试图通过 sagas 实现什么。此外,互联网上几乎没有与该主题相关的资源。

但我完全无法理解定义所谓的 sagas 的目的和好处。我了解处理程序 (IHandleMessages) - 这些是拦截器。但我无法理解 Saga 的用途。文档中的语言假设我应该知道一些特别的东西来掌握这个想法,但我不知道。

有人可以用简单的话向我解释一下,希望用现实生活中的例子来解释我必须或应该定义 Saga 的情况,这样做有什么好处?我已经创建了一个具有多个端点和 Saga 定义的应用程序,如示例中所示,它可以工作(我猜)但我不明白这些 saga 的定义是什么......在许多示例中,他们使用 Saga 类中的 RequestTimeout() 方法。为什么,为什么有人要故意造成超时?我不想在这里放任何代码片段,因为它不相关,我需要了解为什么我要使用“Sagas”,这意味着什么?

谢谢你。

0 投票
1 回答
57 浏览

nservicebus - NServiceBus Saga 中是否可以有条件流?

我是 NServiceBus 及其 Saga 的新手......是否可以在 sagas 中实现条件流?saga: s->a->b->e 在'a',我应该可以选择是去b还是新的状态c。从'c'再次我应该到达e

0 投票
1 回答
92 浏览

synchronization - NServiceBus - 如何确保 SagaData 在工作服务器之间同步?

在 NServiceBus 4.6.5 中,消息使用 Round-Robin 算法发送到 Worker 服务器。

我在 Sagas 中有一些数据来检测不同步的业务消息。该数据存储在 Oracle 数据库中。

如何确保所有服务器始终共享相同的 SagaData(同步),以便如果一台服务器对该 SagaData 进行更改,其他服务器 SagaData 会自动失效并更新?

我一直在阅读这篇文章,在 NServiceBus 4.6.5 中,我正在实现 ISagaPersister 接口并将所有内容保存到 Oracle 数据库中。

谢谢

0 投票
1 回答
192 浏览

nservicebus - nservicebus 从另一个 Saga 中调用 Saga

我是 NServiceBus 的新手,并试图找到对使用补偿事务的场景进行建模的最佳方法。

例如,假设我有一个典型的 BookHotel 场景:

在令人满意的情况下,消息传递流程将按如下方式进行:

  1. BookHotelCommand --> BookHotelSaga
  2. BookFlightCommand --> 回复 IFlightBookedMessage
  3. BookRentalCommand --> 回复 IrentalBookedMessage
  4. ReplyToOriginator --> HotelBookedMessage

我将如何在上述流程中为补偿交易建模?基于某些业务条件,我最初考虑在上述回复之一中调用“UnbookHotelSaga”。然而,我似乎遇到了一些挑战,让这个工作。如果这是正确的方法,有 Saga 经验的人可以发表评论吗?

这是我认为可以通过调用另一个 Saga 来实现的场景:

  1. BookHotelCommand --> BookHotelSaga
  2. BookFlightCommand --> 回复 IFlightBookedMessage
  3. BookRentalCommand --> (条件满足) --> UnbookHotelCommand --> UnbookHotelSaga
  4. UnbookRentalCommand --> 回复 IUnbookRentalMessage
  5. UnbookFlightCommand --> 回复 IUnbookFlightMessage
  6. UnbookHotelCommand --> ReplyToOriginator --> UnbookedHotelMessage

有人可以就实施补偿交易的最佳实践方法提出建议吗?

0 投票
1 回答
168 浏览

testing - 我如何在测试场景中连接 NServiceBus 的 SqlSaga?

https://docs.particular.net/nservicebus/testing/有一个非常简洁的示例来说明如何测试一个简单的 Saga。不幸的是,它没有解释如何对 SqlSaga 做同样的事情 - 即。一个将状态持久化到数据库的 Saga。

鉴于这个传奇:

如果我尝试像链接中的示例那样编写测试代码,我会这样做:

对 sut.Handle() 的调用将抛出 NullReferenceException,因为Saga 属性 Data has not been initialized

如何正确连接传奇以进行测试,以便:

  1. 数据初始化
  2. 真正需要真正的数据库连接
0 投票
1 回答
567 浏览

nservicebus - NServiceBus.Persistence.Sql.MSBuild 不会从引用的程序集创建 saga sql 脚本

我有一个解决方案,其中我的 Sagas 和托管在两个单独的项目中定义:

项目 NSB => 定义类 CreateAuthoritySetSaga : SqlSaga<...>

Project Webhost => 参考项目 NSB

Webhost 程序集文件定义了 PromotionSqlScript 生成:

但是当我构建解决方案时,只创建了“基线”NServiceBus 表的 SQL 脚本(发件箱、订阅、超时)。sagas 的文件夹是空的

这个问题Unable to host an NServiceBus Saga from another Service with SQL Persistence建议从单独的项目中收集 SQL 输出。但是没有办法指示 NServiceBus.Persistence.Sql.MSBuild 哪些程序集要查找 sagas?