c# - 启动端点时升级到 NServiceBus 3.2.2 异常

标签 c# nservicebus publish-subscribe

我最近使用 Nuget 将我的发布者/订阅者解决方案升级到了 NServiceBus 版本 3.2.2。我的 NServiceBus 发布者和订阅者都是自托管的。

发布商代码:

我使用 NServiceBus.Host.exe 启动 NServiceBus 发布者(调试启动操作 - 在项目属性中启动外部程序)。

应用程序配置:

<?xml version="1.0" encoding="utf-8"?>
 <configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig,  NServiceBus.Core" />
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
    <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
  </configSections>
  <MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
  <UnicastBusConfig ForwardReceivedMessagesTo="">
    <MessageEndpointMappings></MessageEndpointMappings>
  </UnicastBusConfig>
  <MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />
</configuration>

端点配置.cs:

namespace TrackEventPublisher.EventPublisher
{
   [EndpointName("EventPublisher")]
   public class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher
   {
   }
}

我在运行发布者时遇到了以下错误:

启动端点时出现异常,已记录错误。原因:在类型“RavenTimeoutPersistence”上调用构造函数“Void .ctor(Raven.Client.IDocumentStore)”时抛出异常。

堆栈跟踪:

在 d:\BuildAgent-03\work\nsb.master22\src\hosting\NServiceBus.Hosting\GenericHost.cs 中的 NServiceBus.Hosting.GenericHost.Start():第 45 行 在 NServiceBus.Hosting.Windows.WindowsHost.Start() 在 d:\BuildAgent-03\work\nsb.master22\src\hosting\NServiceBus.Hosting.Windows\WindowsHost.cs:line 56 在 NServiceBus.Hosting.Windows.Program.<>c_DisplayClass8.b_4(WindowsHost 服务)在 d:\BuildAgent-03\work\nsb.master22\src\hosting\NServiceBus.Hosting.Windows\程序.cs:第 95 行 在 Topshelf.Internal.ControllerDelegates 1.StartActionObject(Object obj) in d:\dev\open-source\topshelf\src\Topshelf\Internal\ControllerDelegates.cs:line 18 at Topshelf.Internal.IsolatedServiceControllerWrapper 1.<>c_DisplayClass2.b_1(TService服务)在d:\dev\open-source\topshelf\src\Topshelf\Internal\IsolatedServiceControllerWrapper.cs:line 65 在 Topshelf.Internal.ServiceController 1.<.cctor>b__1(ServiceController 1 sc) 在 d:\dev\open-source\topshelf\src\Topshelf\Internal\ServiceController.cs:line 35 在 Magnum.StateMachine.LambdaAction 1.Execute(T instance, Event event, Object parameter) in :line 0 at Magnum.StateMachine.EventActionList 1.Execute(T stateMachine, Event event, Object parameter) in:line 0

什么可能导致此错误?
谁能告诉我端点配置有什么问题?

我的解决方案适用于较早版本的 NServiceBus(3.0 版之前)。

更新: 这是内部异常消息:“无法连接到远程服务器”

Raven服务器是不是由NServiceBus自动启动的?它似乎没有在我的机器上运行......

更新 嗯,由于某种原因,RavenDB 服务没有在我的机器上运行——尽管它被设置为自动启动。我的解决方案现在工作正常。我想我必须通过艰难的方式来了解 RavenDB :)。

有没有人在运行 RavenDB 服务时遇到问题?

更新

现在我已经启动并运行了我的服务,我尝试在另一台机器上运行它。未创建 msmq 文件夹,我收到 RavenDB 不可用的错误消息。事实上,在不同的 Windows 操作系统机器上运行我的解决方案后,RavenDB 服务没有安装。我尝试运行随版本 3.2.2 发布的“RunMeFirst.bat”。但是,bat 文件会尝试使用 visual studio 安装扩展。如果安装了 visual studio 但未安装 Nuget 扩展,则会发布另一个错误。

有没有更好的方法来启用 NServiceBus.Host.exe 安装 RavenDB 服务器和 msmq 文件夹,而无需在 Windows 操作系统机器上安装 visual studio 实例?

更新

哇,有史以来最多的更新!我将以下类添加到成功创建了 msmq 文件夹的发布者项目中:

   class MsmqTransportConfigOverride : IWantCustomInitialization, INeedToInstallInfrastructure<Windows>
   {
      public void Init()
      {
       Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install();
      }

      public void Install(System.Security.Principal.WindowsIdentity identity)
      {
      }
   }

这个实现 IWantCustomIntialization 接口(interface)的新类似乎工作得很好。但是,我仍在努力更新我的发布者以在 Windows 主机上安装 RavenDB。我知道那里有一个命令行提示符可以促进这一点,但还有另一种方法吗?我试图实现 INeedToInstallInfrastructure 接口(interface),但我找不到任何示例。有人有什么想法吗?

最佳答案

我们仅在以下情况下运行安装程序: 1. 将端点安装为 Windows 服务(如果在生产配置文件中运行 => 默认值) 2.以 Debug模式运行 3.在集成/精简配置文件中运行

这就可以解释为什么没有创建队列(假设以上都不适合您?)

关于c# - 启动端点时升级到 NServiceBus 3.2.2 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10953627/

相关文章:

c - C 中的 ZMQ 发布者端过滤

c# - 我应该使用什么技术来处理进程间事件/通知?

nservicebus - 链接事件/命令?

go - Redis 发布/订阅 Ack/Nack

c# - Windows 7 图标大小问题

json - NServiceBus:人类可读的消息体

xmpp - XMPP PubSub 通知是同时广播还是排队?

c# - 如何从现有的 excel 文件中读取单元格值

c# - 无法使用 StackExchange.Redis 从主机连接到 docker redis 容器

c# - 如何使用 JSON.NET 创建字典<string, string> 类集合