问题标签 [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.

0 投票
1 回答
577 浏览

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。

0 投票
2 回答
641 浏览

nservicebus - 我们应该如何使用 nservicebus 处理长时间运行的进程

我知道这对很多人来说似乎很明显,但我的客户正在使用一种我不太方便的模式。

案例是,他们的客户发送存款或取款,通过 nservicebus 发送到第三方系统。第三方系统需要处理该交易,但可能需要数天,甚至数周才能完成交易。

今天的解决方案是创建一个 saga,它首先发送一条消息,将交易交给第三方系统。完成后,sagas 下一步是检查完成更新。如果事务未完成,则会发送 requesttimeout,“就像等待”。当达到超时时,再次执行相同的检查并发送新的 requesttimeout ......等等。这一个永恒的循环。它所做的其他事情就是一遍又一遍地用相同的 SagaTimeout 完全填充 ServiceInsight。

我一直在研究单反,但似乎人手不足。我只需要对特定消息而不是所有消息进行多次重试。

另外,第三方系统无法发送交易已完成的事件,这意味着我们需要轮询完成更新。

另一个,我认为更好的解决方案是保存交易状态,将交易发送给第三方并完成这个特定的传奇。然后有一个使用时间间隔检查完成更新的传奇。

以这种方式使用 sagatimeouts 是一种常见的模式吗?而且,让 saga/handler 只检查完成更新是不是更好的解决方案?

0 投票
1 回答
127 浏览

nservicebus - 应该处理哪些 ServiceControl.Contracts 消息?

我正在尝试确保 3rd 方依赖项正在运行,并基于Monitoring 3rd party Sample Application构建了一个服务来执行此操作,它发出 ServiceControl CheckResult 消息。

这很好用;当我停止/启动本地和远程 Windows 服务、数据库、通量电容器等时,ServicePulse 会提醒我。

我现在想构建一个 Windows 服务/nServiceBus 端点,例如 ServicePulse,但具有可以尝试恢复、发送电子邮件等的逻辑。我真的不想将此代码放入 3rdParty 监视器中。

我遵循了servicecontrol/external-integrationsservicecontrol/contracts教程,并创建了我的MendStuffOrEmail端点——但它不起作用;它不接收任何消息。

我正要问“我做错了什么?”,但我想我知道;我正在使用 IHandleMessages<ServiceControl.Contracts.MessageFailed> 用于失败的消息。

我需要收听“CheckResult”类型的消息——但它们是什么?我查看了 ServiceControl 和 ServicePulse 代码,但无法确定发送/接收的内容。我怎样才能发现这一点,或者其他人实际上已经这样做并且已经知道了?

更新
经过更广泛的翻阅后,我还订阅了 CustomCheckFailed 和 CustomCheckSucceeded 消息。我为它们实现了 IHandle 接口,但我仍然没有收到任何消息。日志显示自动订阅者已订阅它们。接下来我应该检查什么?

0 投票
0 回答
350 浏览

c# - 在 NServiceBus 端点中使用实体框架会引发 EntityException“底层提供程序在打开时失败”

我有一个 NServiceBus 5.2.9 端点,我正在通过 NServiceBus 注入一个 DBContext 实例。

配置:

这是服务的构造函数:

当我尝试访问上下文字段时,我得到了 EntityException:

抛出异常:NServiceBus.Core.dll 中的“System.Data.Entity.Core.EntityException”附加信息:底层提供程序在打开时失败。

为什么会这样?

我不确定正确的生命周期范围是什么。是DependencyLifecycle.InstancePerUnitOfWork吗?DBContext 是一个 UOW 构造,但我不确定它是否与 NServiceBus 相同。

进入此端点的消息始终是 ONE(传输)消息,因此这应该正确适用于使用 InstancePerUnitOfWork 范围。

上下文实例在类中共享,因此每次访问它时,我都会像这样锁定一个 syncLock:

我将如何正确使用 DBContext,同时牢记线程安全?

太感谢了。

编辑: 连接字符串/配置没问题,我在许多地方都使用相同的上下文,正如根据 app.config 和/或 web.config 配置的那样。

0 投票
1 回答
1786 浏览

c# - 尝试将 NServiceBus 配置为使用 NHibernate 持久性时出现异常

在使用内存中的持久性进行开发之后,我正在尝试使一些端点使用 NHibernate 持久性。我正在使用最新的 Nuget 包。

马上我得到以下例外。它提到了 NServiceBus.Host 所基于的 Topshelf,但我不知道为什么。

请注意:使用内存持久性我根本没有收到任何错误。

抛出异常:NServiceBus.NHibernate.dll 中的“System.InvalidOperationException”抛出异常:NServiceBus.Host.exe 中的“System.InvalidOperationException”抛出异常:NServiceBus.Host.exe 中的“Magnum.StateMachine.StateMachineException”附加信息:异常发生在Topshelf.Internal.ServiceController`1[[NServiceBus.Hosting.Windows.WindowsHost, NServiceBus.Host, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c]] 在处理 OnStart 时处于初始状态

抛出异常:NServiceBus.Host.exe 中的“Magnum.StateMachine.StateMachineException”附加信息:Topshelf.Internal.ServiceController`1 [[NServiceBus.Hosting.Windows.WindowsHost, NServiceBus.Host, Version=6.0.0.0, Culture 中发生异常=中性,PublicKeyToken=9fc386479f8a226c]] 在处理 OnStart 时处于初始状态

引发的异常:mscorlib.dll 中的“System.InvalidOperationException” 在 mscorlib.dll 中发生了“System.InvalidOperationException”类型的未处理异常附加信息:在您的配置文件中找不到 NHibernate 属性(E:\Projects....... ..\MyEndpoint.dll.config)。

要使用 NHibernate 运行 NServiceBus,您至少需要指定数据库连接字符串。以下是所需内容的示例:

value="NHibernate.Driver.Sql2008ClientDriver"/>

目录=超时;集成安全=True" />

文档没有说这些设置在每个端点的 app.config 中都是强制性的 。我想在代码中专门配置它。这甚至可能吗?

这是我的 NH 配置,为此我创建了一个名为“nservicebus”的空 SqlServer 2014 数据库:

我错过了什么?文档使它听起来很简单,但事实并非如此。

编辑

做这项工作的原因是这样做的:

MsSql2008Dialect 也适用于 Sql 2012、2014。

app.config 中剩下的是连接字符串,无论如何我都需要实体框架。

但是,正如@DavidBoike 下面提到的,您也可以将其从 app.config 中取出并以编程方式对其进行配置。

0 投票
1 回答
132 浏览

nservicebus5 - NServiceBus 未发布到 MSMQ

我正在使用以下代码进行试点以测试 NServiceBus 的发布者/订阅者模式。 我想先独立测试发布功能。 但是,每次我独立运行发布者时,我的消息都会记录到错误日志中。

Publisher.proj 的 Program.cs

Publisher.proj 的 App.config

错误: 2015-11-22 21:57:01.264 WARN NServiceBus.Faults.Forwarder.FaultManager 带有“396bf681-f7b7-44f7-88b6-a5580169b865”ID 的消息 FLR 失败,将移交给 SLR 进行重试尝试 1。

0 投票
0 回答
63 浏览

nhibernate - 如何配置 NServiceBus NHibernate Persistance 以使用“订阅”以外的表名?

如何配置 NServiceBus NHibernate Persistance 以使用“订阅”以外的表名?

我正在使用 NServicebus 5 和 SQL Server 2008 进行订阅存储。

我能够使用以下 appSetting 设置我的架构

0 投票
2 回答
670 浏览

nservicebus - 如何在自定义 NServiceBus 配置文件处理程序中访问端点配置

我正在将代码从 NSBv4 迁移到 NSBv5(确切地说是 5.2.12),并且我有一个自定义配置文件实现:

如何在此处访问端点配置?

我正在使用 NServiceBus.Host (如果重要,v6.0.0)托管这个应用程序,这就是IHandleProfile<T>接口的来源。

BusConfiguration是一个配置生成器,似乎无法从中读取任何有用的信息。我试图向Configure我的配置文件处理程序的构造函数注入一个实例,但随后它崩溃了 - NSB 需要处理程序有一个无参数的构造函数。

实现IWantTheEndpointConfig也不是一个选项,因为它在 v5 中已被弃用,并且会导致编译错误。其过时的错误消息指出:

IHandleProfile现在传递了一个实例Configure

(这对我的情况来说是完美的),但据我所知这是不正确的(没有Configure传递给ProfileActivated(),我看不到如何注入它)。

我是使用完全不同的方法重新实现配置文件处理程序的唯一选择,还是我遗漏了什么?

0 投票
1 回答
388 浏览

c# - NServicebus.host.exe 不能让我的类库在 .Net Framework 4.5.1 Visual Studio 2015 中运行

我正在使用带有框架 4.5.1 和 NServicebus5 的 Visual Studio 2015。

我正在从复数视觉视频中学习 NServicebus。它提到“要使用主机只需创建一个新的 C# 类库并引用 NServiceBus.Host NuGet 包。该包将创建一个示例端点配置并将 NServiceBus.Host.exe 设置为端点的启动项目。”

但是,在 Visual Studio 2015 中,属性 --> 调试选项卡下没有可用的“启动项目”选项。此外,NServicebus.host(6.0.0) 没有创建端点配置文件。因此我无法运行我的类库。

谁能告诉我如何让它在 Visual Studio 2015 中工作?

0 投票
1 回答
198 浏览

rabbitmq - 使用 RabbitMQ+RavenDB 的原型项目重复来自 RabbitMQ 的 SharedQueue 关闭错误

我创建了一个简单的 saga 原型项目,其中 RabbitMQ 作为传输,RavenDB 作为持久性机制。原型实际上按预期运行,但每隔几秒钟我就会收到此错误消息:

错误 NServiceBus.Transports.RabbitMQ.RabbitMqDequeueStrategy 无法从 [Assembly] 接收消息。重试 System.AggregateException:发生一个或多个错误。--> System.IO.EndOfStreamException: SharedQueue 在 RabbitMQ.Util.SharedQueue 1.EnsureIsOpen() at RabbitMQ.Util.SharedQueue1.Dequeue 关闭(int 32 毫秒超时.......

在上述消息之后,我也立即收到一条几乎相同的消息,但它说它无法接收来自 RabbitMGPoller.Timeouts 的消息

除此之外,还有不断的 INFO 消息说:NServiceBus.Transports.RabbitMQ.RabbitMqConnectionManager 与 RabbitMQ 代理断开连接,原因:AMQP 关闭原因,已启动库,代码 = 0 文本 =“流结束”...原因 = 系统.IOException:无法将数据写入传输连接:现有连接被远程主机强行关闭。---> System.Net.Sockets.SocketException: 现有连接被远程主机强行关闭...

我尝试将 DequeueTimeout=600 值添加到传输连接,但仍然会出现相同的错误。我也尝试在配置文件中添加以下键,但它似乎仍然没有帮助。