0

大约一年前,我能够让 NSB 站起来,并在 Azure 上以 WorkerRole 出色地工作。我们实施了一些服务。这需要一些工作,围绕依赖项和版本有几个问题,但是经过大量调整后,我们让一切正常运行。

快进到今天,新产品试图建立一个简单的例子,在 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. OrderWebsite,上面替换为 NuGet 包 (NServiceBus.Azure)。

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

  10. 调试

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

  1. 手动添加了到 OrderWebsite 的绑定重定向(可选地可以参考 NuGet 进行诊断)

    1. 调试

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

    1. 手动添加了对 OrderService 的绑定重定向(可选地可以参考 NuGet 进行诊断)

    2. 调试

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

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

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

    Azure 计算模拟器输出:

当父进程 5704 退出时,代理将退出。[MonAgentHost] 输出:监控代理已启动 [诊断]:启动配置通道轮询 [运行时] 角色入口点。CALLING OnStart() [运行时] 角色入口点。已完成 OnStart() [运行时] 角色入口点。CALLING Run() [运行时] 角色入口点。COMPLETED Run() ==> ROLE RECYCLING INITIATED [runtime] 角色实例回收正在开始 [runtime] Role entrypoint 。CALLING OnStop() [运行时] 角色入口点。COMPLETED OnStop() [fabric] 角色状态忙碌 ROLE RECYCLING INITIATED [runtime] 角色实例回收正在开始 [runtime] Role entrypoint 。CALLING OnStop() [运行时] 角色入口点。COMPLETED OnStop() [fabric] 角色状态忙碌 ROLE RECYCLING INITIATED [runtime] 角色实例回收正在开始 [runtime] Role entrypoint 。CALLING OnStop() [运行时] 角色入口点。COMPLETED OnStop() [fabric] 角色状态忙碌

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

有人对我如何查明原因有任何想法吗?

非常感谢,瑞安

4

2 回答 2

0

实际上,这与 Visual Studio 工具版本 (2.1) 与 nservicebus 4.0 对 ServiceRuntime 和诊断程序集 (2.0) 的引用之间的不兼容有关。在运行时,它们需要匹配,否则您会在部署时看到奇怪的行为,正如您提到的那样。

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

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

于 2013-10-08T06:12:00.393 回答
0

最新稳定的 NServiceBus.Azure 可与 Azure SDK 2.0 配合使用。我强烈推荐使用 2.0,你可以在同一台开发机器上同时拥有 2.0 和 2.1。

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

于 2013-10-07T23:14:50.687 回答