问题标签 [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.
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。
nservicebus - 我们应该如何使用 nservicebus 处理长时间运行的进程
我知道这对很多人来说似乎很明显,但我的客户正在使用一种我不太方便的模式。
案例是,他们的客户发送存款或取款,通过 nservicebus 发送到第三方系统。第三方系统需要处理该交易,但可能需要数天,甚至数周才能完成交易。
今天的解决方案是创建一个 saga,它首先发送一条消息,将交易交给第三方系统。完成后,sagas 下一步是检查完成更新。如果事务未完成,则会发送 requesttimeout,“就像等待”。当达到超时时,再次执行相同的检查并发送新的 requesttimeout ......等等。这是一个永恒的循环。它所做的其他事情就是一遍又一遍地用相同的 SagaTimeout 完全填充 ServiceInsight。
我一直在研究单反,但似乎人手不足。我只需要对特定消息而不是所有消息进行多次重试。
另外,第三方系统无法发送交易已完成的事件,这意味着我们需要轮询完成更新。
另一个,我认为更好的解决方案是保存交易状态,将交易发送给第三方并完成这个特定的传奇。然后有一个使用时间间隔检查完成更新的传奇。
以这种方式使用 sagatimeouts 是一种常见的模式吗?而且,让 saga/handler 只检查完成更新是不是更好的解决方案?
nservicebus - 应该处理哪些 ServiceControl.Contracts 消息?
我正在尝试确保 3rd 方依赖项正在运行,并基于Monitoring 3rd party Sample Application构建了一个服务来执行此操作,它发出 ServiceControl CheckResult 消息。
这很好用;当我停止/启动本地和远程 Windows 服务、数据库、通量电容器等时,ServicePulse 会提醒我。
我现在想构建一个 Windows 服务/nServiceBus 端点,例如 ServicePulse,但具有可以尝试恢复、发送电子邮件等的逻辑。我真的不想将此代码放入 3rdParty 监视器中。
我遵循了servicecontrol/external-integrations和servicecontrol/contracts教程,并创建了我的MendStuffOrEmail端点——但它不起作用;它不接收任何消息。
我正要问“我做错了什么?”,但我想我知道;我正在使用 IHandleMessages<ServiceControl.Contracts.MessageFailed> 用于失败的消息。
我需要收听“CheckResult”类型的消息——但它们是什么?我查看了 ServiceControl 和 ServicePulse 代码,但无法确定发送/接收的内容。我怎样才能发现这一点,或者其他人实际上已经这样做并且已经知道了?
更新
经过更广泛的翻阅后,我还订阅了 CustomCheckFailed 和 CustomCheckSucceeded 消息。我为它们实现了 IHandle 接口,但我仍然没有收到任何消息。日志显示自动订阅者已订阅它们。接下来我应该检查什么?
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 配置的那样。
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 中取出并以编程方式对其进行配置。
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。
nhibernate - 如何配置 NServiceBus NHibernate Persistance 以使用“订阅”以外的表名?
如何配置 NServiceBus NHibernate Persistance 以使用“订阅”以外的表名?
我正在使用 NServicebus 5 和 SQL Server 2008 进行订阅存储。
我能够使用以下 appSetting 设置我的架构
nservicebus - 如何在自定义 NServiceBus 配置文件处理程序中访问端点配置
我正在将代码从 NSBv4 迁移到 NSBv5(确切地说是 5.2.12),并且我有一个自定义配置文件实现:
如何在此处访问端点配置?
我正在使用 NServiceBus.Host (如果重要,v6.0.0)托管这个应用程序,这就是IHandleProfile<T>
接口的来源。
BusConfiguration
是一个配置生成器,似乎无法从中读取任何有用的信息。我试图向Configure
我的配置文件处理程序的构造函数注入一个实例,但随后它崩溃了 - NSB 需要处理程序有一个无参数的构造函数。
实现IWantTheEndpointConfig
也不是一个选项,因为它在 v5 中已被弃用,并且会导致编译错误。其过时的错误消息指出:
IHandleProfile
现在传递了一个实例Configure
(这对我的情况来说是完美的),但据我所知这是不正确的(没有Configure
传递给ProfileActivated()
,我看不到如何注入它)。
我是使用完全不同的方法重新实现配置文件处理程序的唯一选择,还是我遗漏了什么?
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 中工作?
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.SharedQueue
1.Dequeue 关闭(int 32 毫秒超时.......
在上述消息之后,我也立即收到一条几乎相同的消息,但它说它无法接收来自 RabbitMGPoller.Timeouts 的消息
除此之外,还有不断的 INFO 消息说:NServiceBus.Transports.RabbitMQ.RabbitMqConnectionManager 与 RabbitMQ 代理断开连接,原因:AMQP 关闭原因,已启动库,代码 = 0 文本 =“流结束”...原因 = 系统.IOException:无法将数据写入传输连接:现有连接被远程主机强行关闭。---> System.Net.Sockets.SocketException: 现有连接被远程主机强行关闭...
我尝试将 DequeueTimeout=600 值添加到传输连接,但仍然会出现相同的错误。我也尝试在配置文件中添加以下键,但它似乎仍然没有帮助。