问题标签 [nservicebus5]
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.
azure - 在 IIS(包括 Azure Web 角色)下托管 NServiceBus 订阅者(消息/事件处理程序)是否安全
我们正在设计一个基于 Web 的系统,但也使用 NServiceBus 和 Azure Service Bus 进行通信。我们有一个为应用程序运行 IIS 的本地服务器,还有几个运行 Web 角色的云服务,用于与外部方通信(这些方调用云中的 RESTful 接口并将消息放在总线上,反之亦然)。
云解决方案和本地服务器都需要订阅和发布消息。发布似乎不是问题,但是如果 IIS 关闭进程,这些订阅会发生什么情况,当消息到达时它们是否会再次被唤醒,或者服务总线是否真的基于拉取订阅,因此需要一个活动的侦听器。
我在这里看到了有关托管发布者的问题,但没有看到有关订阅者安全的问题。
额外信息:我们很偶然地注意到,有时在我们的开发环境中,应用程序需要在消息开始到达之前启动几次。但是我突然想到,如果在应用程序启动时队列中实际上已经有消息,那么它们将被处理,否则不会。因此,重新启动只是意味着它会看到较旧的消息并对其进行处理,然后一旦运行它就可以正常运行。然而,另一位同事指出,nsb 相关的启动日志文件只有在他第一次访问托管在同一 Web 应用程序中的网站后才会生成。我刚刚遇到了类似的问题,消息在队列中,但处理程序上的断点没有被命中。当我在同一个 iis 应用程序实例上点击 webapi 方法时,突然正在处理消息。
nservicebus - NServiceBus - 扫描所有程序集
NServiceBus.dll - 版本 5.2.9 和 NServiceBus.Host - 版本 6.0.0
我正在开发一个带有可插入插件的工作流应用程序。
在我的解决方案中,我有一个使用 NServiceBus.Host.exe 托管的 NServiceBus 主机程序集。为了防止扫描,我在 NServiceBus.Host.exe.config 中定义了 EndpointConfigurationType。
我已经验证了这个配置正在被使用,因为如果我输入了一些未知类型,我会得到一个错误,还因为我的 EndpointConfig 类在任何扫描发生之前就被实例化了。
在这个类的自定义方法中,我添加了
现在,当我运行这个项目时,我收到一个错误,因为 NServiceBus 正在扫描所有程序集并且对 System.AddIn 的性质做了一些无法扫描的程序集!
这种扫描发生在 Libra.Workflow.Host 被实例化之后,但在调用 Customize 方法之前。这是此扫描的调用堆栈:
我得到的错误信息是:
为什么 NServiceBus 扫描这个 DLL,我该如何防止它?
注意:由于这是一个 AddIn DLL,因此在 Libra.Workflow.Host 或任何其他相关程序集中都没有对它的引用,因此 NServiceBus 绝对没有理由必须接触它。
nservicebus5 - 混合自动订阅和消息点映射
我们刚刚完成了一组使用不显眼的模式来查找命令和事件的服务(可能重要的不是消息)
有一个现有的网关,它是我们用来连接的 webapi,它基于它发送的消息类型发布MessageEndpointMappings
。我期待订阅表包含安装后事件的条目。包含 /install 的参数
网关被发送新的事件类型并将其发送到发布调用,但它没有被服务接收。我认为网关无法发布,因为它不知道新类型。我需要MessageEndpointMappings
在网关配置中添加一个,还是应该将其转换为不显眼的模式。我认为映射将需要一个它无论如何都没有的引用,我不确定这两种方法是否兼容。
nservicebus - NServiceBus 在失去与 RabbitMQ 主机的连接时崩溃
我们遇到了一个问题,即 NServiceBus 在与 RabbitMQ 服务器的连接丢失后大约 4-5 分钟后崩溃。
为了重现,我启动了我的应用程序,看到 RabbitMQ 看到了连接,断开了我的网线,然后等待。大约 5 分钟后,NServiceBus 主机崩溃了。
在调试中运行时,我收到以下错误消息:
在我们的服务器上,EventLog 中有以下内容:
这是我们的 RabbitMQ 连接字符串:
是什么导致了这次崩溃?有没有办法从中恢复/抓住它?我们如何优雅地处理与 RabbitMQ 服务器的断开连接?
nservicebus - NServiceBus - Saga 审计 - 未发现异常处理程序
我们正在使用托管在 .Net 4.6.1 Windows 服务中的 NServiceBus 5.2.14。我们通过 AuditConfig 为我们的服务添加了 NServiceBus 审计:
当我们为包含 Sagas 的 windows 服务打开 Auditing 时,我们注意到一些新的订阅添加到我们的订阅 Sql 表中。像这些:
似乎在对 Saga 服务启用审核后,正在发布事件(saga 正在订阅)的服务现在获得了对自身的递归订阅。
处理消息时,副本会成功推送到审核队列。
但是,我遇到的问题是,我还获得了推送到ServiceThatIsPublishingEventTypeA.Error队列中的消息副本,并且在我的日志中引发了异常。
例外是:
这是有道理的,因为ServiceThatIsPublishingEventTypeA服务中没有MyAssembly.MessageTypeA事件的处理程序(它只是发布这些事件),但审计已经添加了这个订阅。
所以我的问题是:递归订阅是否正确?通过 saga 审计流量的正确方法是什么(并避免引发错误)?
谢谢你的帮助
nservicebus - NServiceBus Timeoutsdispatcher 队列在压力测试期间被消息淹没
我正在对使用 2 个超时的传奇进行一些压力测试。在测试期间,大约创建了 21K saga。所以这意味着 42K 超时,但我注意到传奇的 timeoutsdispatcher 队列被成千上万的消息淹没,直到它崩溃,因为达到了 MSMQ 存储限制。
自从我将持久性机制从 RavenDB 切换到 SQL Server 后,我就看到了这种行为。
有谁知道可能出了什么问题?
传输:MSMQ
持久性:NHibernate 使用的包:
测试设置:
* 端点 1 正在向端点 2 发送 22000 条消息。
* 端点 2 托管由该消息启动的 saga。
* 每个 saga 发布一个事件,然后请求 2 次超时:1 次在 4 分钟,1 次在 10 分钟。
观察到的行为:
* 端点 1 在一分钟内发送了 22K 条消息。
* 端点 2(传奇)每秒处理 5 到 10 条消息。
* 4 分钟后第一次超时被触发,而端点 2 仍在处理来自其队列的消息,因此仍在创建新的 saga 实例。
* 从那一刻起,saga 端点的 timeoutsdispatcher 队列被消息填满。
* 大约 10 分钟后,timeoutsdispatcher 队列已经包含超过 170K 的消息并且仍在填满。
* 这种情况一直持续到端点 2 崩溃,因为达到了 MSMQ 存储限制,或者输入队列中的所有消息都已处理。如果后者先发生,则 timeoutsdispatcher 队列消息计数开始减少,直到最终达到 0。
json - NServiceBus:人类可读的消息体
我已经开始学习 NServiceBus 以确定我们是否可以按照我们想要的方式使用 NServiceBus。当我将 NServiceBus 配置为使用 JsonSerializer 进行序列化时,我希望能够直接在队列中读取消息的内容。但是正文不是 JSON 格式的文本,而是十六进制的。我们希望能够打开一个队列/表格并查看消息的内容,而无需将每条消息从十六进制转换为文本。这可能吗?
PS.:我正在使用 NServiceBus v 5.2.14 和 NServiceBus.Host v 6.0.0
nservicebus - Nservicebus 6 - 禁用持久性
有没有办法禁用持久性。我有一个 azure worker 角色端点,它监听在 azure 服务总线端点上发布的事件。所以我不希望我的订阅者有任何持久性。
c# - 如何设计一个从接收多条消息开始的 NServiceBus Saga
我正在尝试寻找有关在 NServiceBus 5.x 中设计由 2 条或更多消息启动的 Saga 的帮助。这意味着 saga 不会以单个消息开始,但所有消息都必须在 saga 开始之前存在。
我不太明白它是如何工作的,并且在任何地方都找不到示例或示例。
我读了几本书,其中清楚地表明由几条消息开始一个传奇是完全可以的。
我不明白的是,当您需要例如 3 条消息来启动 saga 时如何找到 saga。在 saga 可以“开始”之前,所有 3 条消息必须以任何顺序到达。这对我对[Unique]
属性的选择有何影响?
示例:我需要由三个 ID“StoreID”、“ComputerID”、“UserID”“唯一”标识的 saga。这三个 ID 将到达三个不同的命令,Message1
, Message2
, Message3
。
MySagaData 是否应该在三个属性上具有 [Unique] 属性?
还是我必须创建连接这三个的只读属性?
当Message1
和Message3
到达时,传奇无法开始。Message2
不见了。
然后另一个Message1
来了。
然后Message2
到达。(完成第一个saga,所以可以开始了)
第二个Message1
呢?
这将如何处理?