NServiceBus.Azure - Azure上的AzurePubSub示例主机循环

时间:2013-10-07 18:50:02

标签: azure nservicebus

大约一年前,我能够让NSB站起来并在一个WorkerRole上在Azure上工作得很好。我们实施了一些服务。它需要一些工作,有几个问题围绕依赖关系和版本,但经过大量调整后,我们开始运行。

快到今天,新产品,尝试站起来一个简单的例子,在探索阶段使用NSB v4.0为我们正在构建的系统进行概念验证。 我想站起来这里的AzurePubSub示例; https://github.com/Particular/NServiceBus.Azure/tree/develop/IntegrationTests/AzurePubSub

有一段时间让样品运行。我已经记录了我采取的步骤;

使用VS 2k12,NSB 4.0(最新稳定版)

  1. 打开AzurePubSub项目
  2. 提示将项目转换为目标Windows Azure工具 - v2.1(已转换)
  3. 从MyMessages中删除NSB ref,替换为Nuget NServiceBus.Interfaces pkg
  4. 在MyMessages上清理构建
  5. OrderService,删除NServiceBus,NServiceBus.Core,NServiceBus.Azure,NServiceBus.Hosting.Azure,Common.Logging
  6. OrderService,上面替换为NuGet包(NServiceBus.Hosting.Azure)。

  7. OrderWebsite删除了NServiceBus,NServiceBus.Azure,NServiceBus.Core,Common.Logging

  8. 订购网站,上面替换为NuGet包(NServiceBus.Azure)。

  9. 实现了干净的解决方案构建!

  10. 调试

  11. 无法加载文件或程序集' Microsoft.WindowsAzure.Diagnostics,Version = 2.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

    1. 手动将绑定重定向添加到OrderWebsite(可选择引用NuGet for Diagnostics)                    

      1. 调试
      2. 无法加载文件或程序集' Microsoft.WindowsAzure.Diagnostics,Version = 2.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

        1. 手动将绑定重定向添加到OrderService(可选择参考NuGet for Diagnostics)

        2. 调试

        3. 无法加载文件或程序集' Microsoft.WindowsAzure.Diagnostics,Version = 2.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

          1. 删除了Microsoft.WindowsAzure.Diagnostics Reference 2.0.0.0
          2. 将Microsoft.WindowsAzure.Diagnostics参考2.1.0.0(文件版本2.1.6493.0)添加到OrderService和OrderWebsite(左侧绑定重定向)

          3. 调试 OrderWebsite很好地加载。 OrderService陷入循环启动和停止通过Azure Compute Emulator看到。 永远不会调用EndpointConfiguration ctor,也不会调用DefineRouting类IProvideConfiguration实现。

          4. Azure计算模拟器输出:

            [fabric]角色实例:deployment21(119).AzureService.OrderService.0 [面料]角色状态不健康 [Diagnostics]:UpdateState(Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorStartupInfo,Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorConfiguration,) [诊断]:获取互斥锁 [诊断]信息:C:\ Users \ Ryan \ AppData \ Local \ dftmp \ Resources \ a903dc1b-98a5-4a78-b04d-c533e881564d \ directory \ DiagnosticStore \ Monitor [诊断]信息:D:\ GitHub \ NServiceBus.Azure \ IntegrationTests \ AzurePubSub \ csx \ Debug \ roles \ OrderService \ diagnostics \ x64 \ monitor \ MonAgentHost.exe -LocalPath" C:\ Users \ Ryan \ AppData \当地\ dftmp \资源\ a903dc1b-98a5-4a78-b04d-c533e881564d \目录\ DiagnosticStore \显示器" -StaticConfigFile" C:\ Users \ Ryan \ AppData \ Local \ dftmp \ Resources \ a903dc1b-98a5-4a78-b04d-c533e881564d \ directory \ DiagnosticStore \ Monitor \ Configuration \ mastaticconfig.xml" -ConfigFile" C:\ Users \ Ryan \ AppData \ Local \ dftmp \ Resources \ a903dc1b-98a5-4a78-b04d-c533e881564d \ directory \ DiagnosticStore \ Monitor \ Configuration \ maconfig.xml" -ShutDownEvent WADDM-ShutDown-81011d9e243b47bc8941b805e7146ce3 -InitializedEvent WADM-StartUp-81011d9e243b47bc8941b805e7146ce3 -parent 5704 -events [fabric]角色状态停止 [诊断]:创建配置通道服务器 [MonAgentHost]输出:当发出WADDM-ShutDown-81011d9e243b47bc8941b805e7146ce3信号时,代理将退出。 [MonAgentHost]输出:初始化代理后,将发出WADM-StartUp-81011d9e243b47bc8989b805e7146ce3信号。 [MonAgentHost]输出:注册为事件消费者。 [MonAgentHost]输出:当父进程5704退出时,代理将退出。 [MonAgentHost]输出:监控代理已启动 [诊断]:启动配置通道轮询 [runtime]角色入口点。打电话给OnStart() [runtime]角色入口点。已完成OnStart() [runtime]角色入口点。调用Run() [runtime]角色入口点。已完成Run()==>角色再循环引发 [runtime]角色实例回收正在开始 [runtime]角色入口点。呼叫OnStop() [runtime]角色入口点。已完成OnStop() [fabric]角色状态忙碌

            这就是它一遍又一遍地循环的地方。 使用OrderService的Worker Role初始化事件时,显然会发生错误,但我似乎无法找到出错的地方。

            任何人对如何确定原因都有任何想法?

            非常感谢, 莱恩

2 个答案:

答案 0 :(得分:0)

最新稳定的NServiceBus.Azure适用于Azure SDK 2.0。我强烈建议使用2.0,你可以在同一台开发机器上同时使用2.0和2.1。

我还将从源代码构建NSB和NSB.Azure并调试Azure传输初始化。有几个问题,Yves已经修复但我不确定这是否已经发布。我不知道你的配置,也不能真正说出来,但如果你得到不正确的队列名称,它就会默默地失败。

答案 1 :(得分:0)

实际上,这与visual studio工具版本(2.1)和nservicebus 4.0对ServiceRuntime和Diagnostics程序集(2.0)的引用之间的不兼容性有关。在运行时,他们需要匹配,否则您将在部署时看到奇怪的行为。

您可以通过两种方式解决此问题,使用VS工具2.0(在项目属性的某处应该有一个开关),或者引用最新版本的NServicebus.Azure 4.1。如果一切顺利,我们应该很快就能发布这个新版本。

我也很痛苦地意识到这个兼容性问题也会困扰我们未来的版本,所以我希望将来能够将nservicebus与特定的windows azure sdk版本分离。如果你想跟踪那个进展,这是github问题。 https://github.com/Particular/NServiceBus.Azure/issues/26