问题标签 [nservicebus7]

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 回答
116 浏览

c# - NServiceBus 7 的 SqlServer 传输在消息正文列中显示中文字符

我们更新到 NSB 7,现在使用 Sql Server 进行传输和持久化。

(旁注:这在更新大量消息后有效,因为不知何故它们变得不兼容,因为序列化程序从 Newtonsoft.Json 更改为 NServicebus.NewtonsoftSerializer。必须从消息类构造函数中删除所有验证逻辑。)

好的,所以在 SSMS 17.8.1(最新)中,当我打开端点表时,BodyString列显示中文字符。文字不是垃圾,只是中文。

所以我的问题是:为什么计算列显示汉字?数据库中的排序规则是默认值。

为什么会这样,我在这里错过了什么? 这是 .NET 4.72,传输是 Azure Sql 数据库。

0 投票
1 回答
245 浏览

c# - 使用 NServicebus saga 序列化长时间运行的端点处理程序的执行

我们正在尝试使用 Saga 序列化业务对象列表的处理。

现在,在没有 Saga 的情况下,我们只需遍历对象列表,然后触发bus.Send(new ProcessBusinessObejct(obj))async 以执行处理程序。所以处理或多或少是并行发生的,取决于这个设置,我相信:

这工作正常,但并发处理程序的数量现在很难在数据库上。

可以串联触发这些处理程序,即仅在当前进程完成(失败或成功)时继续下一个处理程序。我们不想将并发设置为 1,它会影响端点中的所有处理程序。

这个想法是使用 Scatter/Gather 模式和 Saga 来跟踪对象的数量并使用计数(总计数、失败计数、成功计数)更新状态机,最后在列表出现时触发事件完成/空。

问题是

A)我不确定如何跟踪传奇中的列表。SagaData 需要一个列表来保存所有对象吗?然后在处理程序发出信号完成处理时删除一个实例。 saga 不支持分层数据,因此不支持 List 或 List。我相信在 NSB v7 中仍然是这种情况。

B) 使用 saga 是可行的还是矫枉过正,还是有更简单的方法来实现这一点?

我们正在使用 Sql Server 持久性和传输以及 NSB 7。

非常感谢任何输入!

0 投票
1 回答
223 浏览

nservicebus - NServiceBus 7 - 如何发送多个连续请求?

我正在尝试使用 NServiceBus 和 RabbitMQ 发出多个连续请求。这是我的代码

当我运行程序时,第二次请求尝试出现以下异常:

我知道我可以更改代码以调用 Send 方法并有一个响应处理程序,但我仍然不明白为什么它不适用于请求。我需要做什么才能让它工作?

我尝试设置消息 ID,在第二次调用时不传递发送选项等。似乎没有任何效果。我想这可能是一个错误。

我创建了一个示例项目来重现该行为并在 GitHub 上共享它。这是链接。重要的是要指出它需要一个 RabbitMQ 实例。就我而言,我使用默认的访客用户/密码在本地( http://localhost:15672 )设置了它。

0 投票
1 回答
158 浏览

nservicebus - 如何在负载下提高我的 NServiceBus Saga 的性能

我有一个使用 SQL 传输和 NHibernate 持久性使用 NSB7 构建的非常简单的 Saga。

Saga 侦听一个队列,接收到的每条消息都通过 4 个处理程序运行。它们按顺序调用,2 个处理程序并行运行,最后一个处理程序仅在两个并行处理程序完成后运行。最后一个处理程序将记录写入 DB

假设对于一条消息,每个处理程序需要 1 秒。当收到一条启动 Saga 的新消息时,预期结果是 3-4 秒后记录被写入数据库。

如果队列备份了 1000 条消息,一旦它们再次开始处理,则在最后一个处理程序中创建新记录之前需要将近 2000 秒。基本上,它们不是为每条消息运行预期的 4 秒处理时间,而是有效地聚集在初始处理程序中,直到队列被清空,然后为下一个处理程序再次执行此操作,并不断重复。

关于在负载下如何提高该系统的性能的任何想法,以便源源不断的已处理消息流出来,而不是在一条新记录出现在另一端之前的一堆消息和长时间延迟?

谢谢威尔

0 投票
1 回答
434 浏览

c# - 如何使用通用主机获取消息会话/端点?

我正在运行一些使用通用主机配置 ( https://docs.particular.net/samples/hosting/generic-host/ ) 构建的 NServiceBus 端点。这些端点在 Docker 容器中运行。现在,我想安排一条消息(使用hangfire)。每当执行预定的消息时,我都会收到以下错误:

这是因为 Send() 方法没有消息会话。但是,我如何获得这个会话?查看https://docs.particular.net/nservicebus/hosting/,您可以通过从 EndpointConfiguration 启动新端点来创建会话。由于我使用通用主机,我只有 EndpointConfiguration 但我无权访问由此创建的端点(或者至少我不知道如何)。这是我的配置的样子(非常简化):

这是从以下开始的:

顺便说一句,我正在使用 NServiceBus 7。

编辑

这就是我安排 Hangfire 任务的方式(根据 Szymon 的回答更新,但还没有工作):

结果是: