问题标签 [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 投票
1 回答
545 浏览

nservicebus - RavenDB.SagaPersister.Save 中的异常,“Guid 应包含 32 位数字和 4 个破折号”。乌鸦中的 Guid 是空的

NServiceBus 5.1、RavenDB 持久性、AutoFac 容器、log4net、发布时 NuGet 中的所有最新版本。

端点配置:

  1. 带有 Bus.Send() 的 NServiceBus 调度
  2. ACommand 启动 Saga 2a。ACommand 被处理,在处理程序内部调用 RequestTimeout(InvoiceCreationTimeout)
  3. ACommand 处理程序似乎返回正常。
  4. 在 ACommand 处理程序中的代码之后的某个时间点,我在日志中收到了 FormatException。

我检查了数据库,没有存储 sagas,只有 TimeoutDatas,f.ex:

编辑 日志输出(现在使用 SagaId 登录 ACommand 的处理程序(实际名称是 OrderInvoiceCommand)

0 投票
2 回答
198 浏览

nservicebus - How to configure NServiceBus with two RavenDB IDocumentStores?

In NSB 5, how do I correctly configure NSB with autofac container with one IDocumentStore for NSB data and a separate IDocumentStore for application data? I've pasted the relevant part of EndpointConfig below:

I know this isn't working since I had problems storing sagas in another question. The SagaPersister tried to persist saga in appDataStore, but the Timeout Messages was persisted in nsbDataStore.

0 投票
1 回答
61 浏览

azure - NServiceBus AzureSagaPersistence 架构问题

我通过添加另一个 DateTime 属性更新了我的传奇数据类,一切都变得糟糕透顶。架构没有更新,我开始在每条 saga 消息上都出现异常,但那里没有重要数据,所以我删除了表。

从那时起,saga 数据表就是这样创建的: 在此处输入图像描述

架构中不存在来自 Saga 数据类的字段。

这是我的传奇数据类:

那里有什么问题?在我删除 saga 数据表之前,它非常好。

更新:我从我的数据类中删除了第二个 DateTime 字段,再次删除了表格并开始工作。为什么会这样?

0 投票
1 回答
581 浏览

nservicebus - NServiceBus saga Unique attribute

I have a saga data class with one property marked by Unique attribute. However, this didn't prevent NServiceBus from creating several sagas with identical values in this field.

Here is my data class:

Here is the mapping:

Here is how data gets its values:

And here is what I see in the saga persistence table (Azure table storage):

Does it suppose to work like this or may be I am missing something?

enter image description here

0 投票
1 回答
127 浏览

c# - Saga 等待状态值

我有一个 Saga 应该等待特定的 Database-Value 被更改。我如何实现这一目标?

例子:

当该订单的布尔“已批准”为真时,我想发送一封邮件。但这可能需要数小时甚至数天。我如何告诉 Saga 在几个小时后再次检查?我是 Sagas 和 NServiceBus 的新手,所以答案可能很简单,但我只是没有找到。

0 投票
1 回答
80 浏览

nservicebus - 在 ServiceMatrix 中,是否可以“ConvertToSaga”发布/订阅事件消息而不是命令消息的端点?

我有一个包含 4 个 NSB 主机端点的解决方案,这些端点是使用ServiceMatrix创建的,我想在一个传奇中使用它们。

我知道如何从命令转换为 Saga,并且在测试项目中运行良好。我不明白如何对已发布的事件做同样的事情,因为菜单选项不可用。是否可以使用ServiceMatrix做到这一点?

我尝试按照本教程手动实施更改,并观察转换为 Saga 时对我的测试项目所做的更改。

它构建正常,但在运行时在框架内引发错误:

System.InvalidOperationException 未处理 消息:在 mscorlib.dll 中发生“System.InvalidOperationException”类型的未处理异常

附加信息:没有可用的 IBus 实例,请配置一个并验证您没有在您的 saga 中定义自己的 Bus 属性,因为这隐藏了基类中的一个

我正在使用 VS2013 和 ServiceBus 5。

更新: 我从生成的代码中注释掉了继承的 IHandleMessages<> 接口和公共 IBus Bus 属性,它运行时没有出现此错误。我不乐意这样做,因为使用该工具的下一个设计更改将覆盖这些修复。

0 投票
2 回答
220 浏览

nservicebus - 我可以按名称调用动态传奇吗?

我有一个按名称唯一标识的产品列表。每个产品都有自己的订购流程。我希望每个产品的订购过程都由一个传奇来定义。有没有办法让我使用不同的传奇来处理每个产品?我可以为此使用端点吗?bus.Send(product name, message) 会起作用吗?

我希望这是有道理的。

0 投票
3 回答
378 浏览

nservicebus - 为什么我在回调中看不到我的响应数据?

我们正在评估我公司的 nservicebus 以重写我们的销售流程。我们将使用 sagas 和 web api。我们在客户端遇到了一个块处理响应。我们在客户端使用处理响应作为指导。

从我们的客户端控制器我们有这个代码:

从我们 saga 的处理程序中,我们有以下代码:

localResult.Messages 为空。我究竟做错了什么?

0 投票
0 回答
295 浏览

generics - 实现通用 Nservicebus Saga

在我在 orderspecifier 中的验证处理程序之后将其连接起来

仅当我删除它起作用的通用实现细节时,否则我最终会进入 SagaNotFoundHandler。

0 投票
1 回答
791 浏览

transactions - Saga内部如何处理补偿

我是 nservice 总线的新手,正在尝试学习这些概念。

我正在尝试创建一个应用程序,该应用程序会在从客户那里收取一些款项后注册客户。注册过程中有几个第三方集成,例如 Payment 和 ExternalXYZ 等

我正在考虑执行以下步骤

  1. 从 MVC 控制器调用 WebAPI 层,它将发送一个使用 NService 总线注册客户的命令,例如 BeginRegistrationProcess
  2. BeginRegistrationProcess 将生成一个关联 ID,创建一个 DB 条目并通过另一个命令(例如 ProcessRegistration)启动一个 Saga
  3. ProcessRegistration 将做以下事情

    • 创建一个 Db 条目
    • 调用支付服务(通过 DoPayment 命令 - 这将包括创建数据库条目、拨打电话、处理响应等步骤)
    • 调用 ExternalXYZ Web 服务(通过 CallExternalXYZ 命令——与 DoPayment 中类似的步骤)

    我正在考虑为这两个服务调用创建两个单独的命令,以便它们在自己的小事务范围内。这些命令将在进行服务调用之前和之后记录详细信息。(如果服务调用失败并且我需要重试它们,这可能有助于补偿逻辑)

这是我的问题

  1. 这听起来不错吗?
  2. 我将如何处理错误情况。例如,说第 3 步的 DB 条目已完成,然后在付款时发生超时(可能是卡被借记并且在发布回复时发生超时,或者可能是网络超时)。我将如何确保该卡不会被借记两次。
  3. 如果 DoPayment 处理程序中出现错误,nservicebus 将回滚 ProcessRegistration 传奇中的事务
  4. 如果出现错误,我在调用服务之前从 DoPayment 进行的任何数据库调用会发生什么。

是否有任何示例显示如何在 sagas 中处理补偿。我热衷于创建一个可由 ProcessRegistration 启动的补偿传奇,我可以利用日志表(该表有每个服务调用之前/之后的记录)来启动补偿吗?