问题标签 [nservicebus3]
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.
.net - NServiceBus 中的 IWantToRunAtStartup 和 IWantToRunWhenTheBusStarts 之间的区别?
我正在创建一个 NServicebus 托管进程,并希望初始化我的 IOC 容器并创建一个自托管 Web API 的实例。我试图了解实现 IWantToRunAtStartup 和 IWantToRunWhenTheBusStarts 接口之间的概念差异,因此我可以将初始化代码放在适当的位置。对于这些初始化,哪个接口会更好地实现?
我相信我会为 web api 使用 IWantToRunAtStartup,因为它具有进程关闭时需要的停止接口。但是既然接口说它是依赖注入的,那么 IOC 容器是否应该在 IWantToRunWhenTheBusStarts 或其他地方初始化?
dependency-injection - NServiceBus 依赖注入
我在这方面遇到了一些麻烦。
Andreas Öhlund 在这里回答了一个问题,但我无法使用他给出的建议让它发挥作用。
这是我的设置:
这个想法是特定的命令处理程序覆盖 OnProcess 方法并做他们的事情,然后 DomainRepository 将保存所有内容。
这是我注册组件的方式:
这些是 DomainRepository 使用的所有对象;但是,当我收到命令时, DomainRepository 为空。如果我注释掉注册 DomainRepository 需要的对象的行,我实际上会收到一个错误,说它无法创建它(Autofac DependencyResolutionException)。
应该注意的是,所有其他对象都使用构造函数注入(它们取自先前存在的项目)。我尝试将它们更改为使用公共属性注入,但没有任何区别。
如果有人能指出我在这里做错了什么,将不胜感激!
nservicebus - NServiceBus.Master 配置文件执行期间的 MasterNodeConfig 行为
我今天遇到了路障。在我们的组织中,所有的部署都是由 TFS Build 完成的。每个 NSB 主机组件都由构建门户打包和部署。当我们尝试使用 NSB 的横向扩展功能时,我们必须使用 Master 和 Worker 配置文件安装相同的组件。我们通过在打包时传递所需的参数来管理 Master 和 Worker 安装程序。为了简化流程,我们计划为 Master 和 Worker 使用一个配置文件,我们为 Master 和 Worker 保留 MasterNode 配置。一切都好!它工作得非常好。
根据政策,我们不应该在配置文件中使用服务器名称,我们必须在我们的配置文件中使用 DNS 别名。我们通过在 DNS 别名之上启用 MSMQ 工作来实现它。
现在真正的问题开始了,NServiceBus.Master 配置文件将 Node 值附加到输入队列上。当我们将 DNS 别名用作 Node 时,它会引发以下异常。
System.Exception:启动端点时出现异常,已记录错误。原因:输入队列 [somequeue@some-dns.bus] 必须与此进程 [SOMEDITSERVER01] 在同一台机器上。---> System.InvalidOperationException:输入队列 [somequeue@some-dns.bus] 必须与此进程 [SOMEDITSERVER01] 在同一台机器上。在 NServiceBus.Unicast.Queuing.Msmq.MsmqMessageReceiver.Init(地址地址,布尔事务)在 NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.NServiceBus.Unicast.Transport.ITransport.Start(地址地址)在 NServiceBus.Unicast.UnicastBus。 NServiceBus.IStartableBus.Start(Action startupAction) 在 NServiceBus.Hosting.GenericHost.Start()
--- 内部异常堆栈跟踪结束 --- 在 Magnum.StateMachine.EventActionList 的 NServiceBus.Hosting.GenericHost.Start() 处`1.Execute(T stateMachine, Event event, Object parameter)
--- 内部异常堆栈跟踪结束 --- 在 Magnum.StateMachine.ExceptionActionDictionary 1.Execute(T stateMachine, Event event, Object parameter) at Magnum.StateMachine.State 1 eevent, Object value) at Magnum.StateMachine.StateMachine` 1.RaiseEvent(事件引发)在 Topshelf.Internal.ServiceControllerProxy.Start() 在 Topshelf.Internal.ServiceCoordinator.Start() 在 Topshelf.Internal.Hosts.ConsoleHost.Run() 在 NServiceBus.Hosting.Windows.Program.Main(字符串 [] 参数)
1.HandleException(T stateMachine, Event event, Object parameter, Exception exception)
at Magnum.StateMachine.EventActionList1.RaiseEvent(T instance, BasicEvent
问题:
当 NSB 严格寻找当前 MachineName 作为当前输入队列的有效服务器名称时,为什么 NSB 在输入队列和其他队列上附加 MasterNode 值?为什么 NSB 在与 NServiceBus.Master 或 NServiceBus.Distributor 一起运行时不忽略 MasterNode 值?
如果 NSB 仍想在输入队列上附加 MasterNode 值……为什么 NSB 不解析 DNS 名称,而是限制使用当前 MachineName 进行验证?
最后我们最终得到以下选项,
1.失败的方法:更改 IHandleProfile 上的 MasterNodeConfig 的 Node 值。我喜欢这种方法,但它几乎没有缺点。它不会工作,因为 MasterNodeConfig 没有覆盖 IsReadonly() 的默认行为,它会抛出错误。如果您使用集成配置文件,在安装期间它不会创建 Worker & Distributor 队列
有绕过上述代码创建的运行时错误的技巧。但是,如果您手动处理其他队列创建,我们可以使用它;
2.为worker和master保留两个不同的配置文件并打包。很多工作看起来是可行的。
3.在Master组件部署过程中移除MasterNodeConfig。
我不反对NSB,我喜欢NSB。我只是表达我的沮丧,想知道为什么!为什么它附加 MasterNode 值以及为什么它只是用 Environemnt 验证而不是解决它。
我非常愿意接受您的任何建议。
nservicebus3 - 包装 NServiceBus.IHandleMessages
我被要求开发一个层,该层将充当通用总线,而不直接引用 NServiceBus。到目前为止,由于对不显眼的消息的支持,这并不太难。除了现在,我被要求为 IHandleMessages 提供我们自己的定义,并找到一种在连接期间映射它的方法。所以我在想这样的事情:
其中 IHandle 将是我们自己的定义(顺便说一下,它与 IHandleMessages 完全相同)。我希望反映 AppDomain 并找到所有实现 IHandle 的类并将它们注册到容器中,然后注册一个具有相同类型 T 的 MessageHandlerAdapter。
我的问题是我已经有将近 2 年没有使用 NServiceBus 了,而且我不记得在 NSB 管道中在哪里连接到这种功能。
asp.net-mvc - 当我传递某些类型进行扫描时,MVC 中的 NServiceBus 初始化失败
在我的引导程序中,我首先这样做:
而InitializeNServiceBus的内容是这样的:
但是,当我打开我的 MVC 应用程序时,我得到:
静态属性需要空实例,非静态属性需要非空实例。参数名称:表达式
这里指出了错误的来源:
堆栈跟踪:
当我将 typesToScan 更改为
该应用程序再次运行,但是当然,一旦我尝试将某些东西放在总线上,它就会失败,说它不知道通过扫描类型的类型。
任何人都知道在哪里查看或有此错误的经验?
nservicebus - 从 NServiceBus/Raven 中删除订阅者
使用带有 Raven 的 NserviceBus 3.3 进行订阅持久性。
我正在创建一个原型应用程序,它将在我们的测试环境中使用来自发布者的消息。该应用程序只会使用几周,届时它可能(基本上)以其当前形式被丢弃。
我不希望发布者继续向该订阅者的出站队列发送消息。实际上,我希望它的存在完全从系统中删除。
我将如何从系统中删除该订阅者的所有知识?
c# - 来自配置文件处理程序的具体类型的 NServiceBus ConfigureProperty
我正在尝试配置服务的具体实现的某些属性,该服务的某些属性设置为不同的值,具体取决于在启动时选择的配置文件,但 NSB 似乎不允许在接口的实现上配置属性。如果相关的话,我们正在使用 Castle Windsor 作为容器。
我们最初使用从 EndpointConfig 类运行的服务安装程序设置容器,如下所示:
ServiceAdapter 有一些不在界面中的字符串属性,根据选择的配置文件需要不同的设置:
配置文件处理程序执行以下操作:
但是当配置文件被加载时,它会抛出System.InvalidOperationException: Cannot configure property for a type which hadn't been configured yet. Please call 'Configure' first.
.
是否可以在不将属性添加到接口中的情况下对具体实现进行属性注入?
nservicebus - 在 NServiceBus 3+ 中将超时管理器与分配器一起使用的正确方法是什么?
前 3 版的建议是将超时管理器作为独立进程在您的集群上运行,在分发服务器旁边。(详见此处: http: //support.nservicebus.com/customer/portal/articles/965131-deploying-nservicebus-in-a-windows-failover-cluster)。
在将超时管理器包含为卫星程序集之后,在与分发器进行横向扩展时,使用它的正确方法是什么?
服务 A 的每个工作人员应该在启用超时管理器的情况下运行,还是应该只将服务 A 的分发进程配置为运行服务 A 的超时管理器?
如果每个工作人员都运行它,他们是否共享相同的 Raven 实例来存储超时?(如果是这样,你如何确保两个或更多工作人员不会同时选择相同的过期超时?)
nservicebus - 暂停和修改 NServiceBus 传奇超时
我有一个传奇,它代表了“人”到“案例”的长期工作分配过程。几个事件可能会启动它,并且在流程结束时我们有一个分配确认,此时 saga 完成并且 Person 被分配给 Case。我想为这个传奇设置一个超时时间,这样我们就不会无限期地等待确认——这绝对是一个有效的业务用例。那里没有困难 - 相当香草。
扭曲的是,如果有人搁置案例,则此分配过程可能会被阻止。我有一个可以订阅的事件,因此我的 assignment saga知道Case 处于暂停状态,但除非我调整超时或以某种方式暂停它,否则 assignment saga 可能会在 Case hold 被释放之前超时。这样做没有商业意义,所以我基本上想停止超时时钟,直到其他事件发生。
几年前这里也提到了同样的问题。这仍然是不可能的,还是 v3.x 中有允许它的新功能?如果没有,这是计划中的功能吗?
谢谢!
asp.net-mvc-4 - 使用 ASP.NET MVC4 和 StructureMap 配置 NServiceBus
我通过从 nuget 安装 structuremap 和 structuremap.mvc4 创建了一个 ASP.NET MVC 4 Web 应用程序。然后我添加了同样来自 nuget 的 nservicebus 和 nservicebus.structuremap 包。
我之前用结构映射创建了几个 mvc4 应用程序,没有任何问题,并且我遵循了一些关于使用 nservicebus 和结构映射的基本 pub/sub 教程并让它工作。
但是,当我尝试时,将 nservicebus 放入带有结构映射的 mvc4 并不能很好地工作。我遇到的问题是下面列出的 mvc 和 DI 与 MVC 的 nservice 总线教程似乎希望开发人员使用内置的依赖注入容器。
http://support.nservicebus.com/customer/portal/articles/894008
http://support.nservicebus.com/customer/portal/articles/894123
如果您以前使用过结构映射,那么 nuget 包会很好地添加解析器并使用 WebActivator 运行初始设置。之后,我不确定容器会发生什么,所以我无法使用它来设置 Configure.With().StructureMapBuilder(StructureMap Container) 中的 NServiceBus Builder。
为了使 nservicebus 和 structuremap 在 asp.net MVC4 中运行良好,我需要做什么?我知道它的操作员错误,但我不确定此时该怎么办?另外,版本 3 不是在某个地方有一个带有一些漂亮配置角色的 messageendpointconfig 吗?这不适用于网络环境吗?我想我可以得到一个容器的引用然后去,但情况似乎并非如此。
编辑:添加了一些代码
编辑 2:即使我通过将依赖解析器设置为 Application_Start() 的位置来解决 StructureMap 的问题,NServiceBus 仍然需要配置 MessageForwardingInCaseOfFaultConfig 和 MsmqTransportConfig。
我想我记得那些属性应该由通过端点配置上的接口设置的角色自动配置?