3

我最近使用 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>

EndpointConfig.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.Windows.WindowsHost.Start() 中的 NServiceBus.Hosting.GenericHost.Start() 中的第 45 行在 d:\BuildAgent-03\work\nsb.master22\src\hosting\NServiceBus.Hosting.Windows\WindowsHost.cs:NServiceBus.Hosting.Windows.Program.<>c_ DisplayClass8.b _4的第 56 行在 d:\BuildAgent-03\work\nsb.master22\src\hosting\NServiceBus.Hosting.Windows\Program.cs:topshelf.Internal.ControllerDelegates 1.StartActionObject(Object obj) in d:\dev\open-source\topshelf\src\Topshelf\Internal\ControllerDelegates.cs:line 18 at Topshelf.Internal.IsolatedServiceControllerWrapper1.<>c_ DisplayClass2.b _1(TService service) 的第 95 行d:\dev\open-source\topshelf\src\Topshelf\Internal\IsolatedServiceControllerWrapper.cs:Topshelf.Internal.ServiceController 的第 65 行1.<.cctor>b__1(ServiceController1 sc) 在 d:\dev\open-source\topshelf\src\Topshelf\Internal\ServiceController.cs:第 35 行 Magnum.StateMachine.LambdaAction 1.Execute(T instance, Event event, Object parameter) in :line 0 at Magnum.StateMachine.EventActionList1.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 接口的新类似乎工作得很好。但是,我仍在努力更新我的发布者以在 Windows 主机上安装 RavenDB。我知道有一个命令行提示可以促进这一点,但还有其他方法吗?我尝试实现 INeedToInstallInfrastructure 接口,但我找不到任何示例。有没有人有任何想法?

4

1 回答 1

2

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

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

于 2012-06-12T08:33:48.317 回答