Azure Worker角色中承载的NServicebus不工作

Azure Worker角色中承载的NServicebus不工作,nservicebus,azure-worker-roles,Nservicebus,Azure Worker Roles,我可能在这个问题上遗漏了一些明显的东西,但我似乎无法将端点部署为azure worker角色,以便在生产环境中工作;它在本地azure模拟器下运行良好 以下是我使用nservicebus示例附带的一个示例项目复制此问题所采取的步骤: 从3.2.8版本下载的示例 使用AzurePubSub示例,并将web和worker角色中的配置更改为使用实际存储位置,而不是本地开发存储 使用本地计算仿真程序在本地运行,以验证web角色和工作角色是否按预期工作 部署到生产环境。web角色按预期工作并将消息放置在队

我可能在这个问题上遗漏了一些明显的东西,但我似乎无法将端点部署为azure worker角色,以便在生产环境中工作;它在本地azure模拟器下运行良好

以下是我使用nservicebus示例附带的一个示例项目复制此问题所采取的步骤:

  • 从3.2.8版本下载的示例
  • 使用AzurePubSub示例,并将web和worker角色中的配置更改为使用实际存储位置,而不是本地开发存储
  • 使用本地计算仿真程序在本地运行,以验证web角色和工作角色是否按预期工作
  • 部署到生产环境。web角色按预期工作并将消息放置在队列中,但worker角色不处理该消息
  • 没有例外,工人角色按预期部署和启动;它似乎无法处理消息

    我希望我错过了一些简单的事情,有人曾经遇到过这个问题

    更新: 我看到下面的日志条目位于角色的事件日志中。问题仅仅在于默认日志记录配置文件试图访问127.0.0.1:10000

    以下是示例配置为使用的配置文件:

    NServiceBus.Production NServiceBus.OnAzureTableStorage NServiceBus.WithAzureStorageQueues
    
    下面是完整的事件日志条目:

    An unhandled exception occurred. Type: System.Exception Process ID: 2512
    Process Name: WaWorkerHost
    Thread ID: 6
    AppDomain Unhandled Exception for role OrderService_IN_0
    Exception: Exception when starting endpoint, error has been logged. Reason: Unable to connect to the remote server
       at NServiceBus.Hosting.GenericHost.Start()
       at NServiceBus.Hosting.Azure.RoleEntryPoint.Run()
       at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.StartRoleInternal()
       at Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.<StartRole>b__1()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
    
    Inner Exception: Unable to connect to the remote server
       at Microsoft.WindowsAzure.Diagnostics.Management.RoleInstanceDiagnosticManager.<.ctor>b__2(Object sender, ErrorEventArgs args)
       at Microsoft.WindowsAzure.Diagnostics.ControlChannel.GetControlContainer()
       at Microsoft.WindowsAzure.Diagnostics.ControlChannel.set_StartupInfo(DiagnosticMonitorStartupInfo value)
       at Microsoft.WindowsAzure.Diagnostics.Management.RoleInstanceDiagnosticManager..ctor(CloudStorageAccount storageAccount, String deploymentId, String roleName, String roleInstanceId)
       at NServiceBus.Integration.Azure.AzureAppender.ConfigureAzureDiagnostics()
       at NServiceBus.SetLoggingLibrary.Log4Net(Configure config, Object appenderSkeleton)
       at NServiceBus.SetLoggingLibrary.Log4Net[TAppender](Configure config, Action`1 initializeAppender)
       at System.Collections.Generic.List`1.ForEach(Action`1 action)
       at NServiceBus.Hosting.Profiles.ProfileManager.ActivateProfileHandlers()
       at System.Collections.Generic.List`1.ForEach(Action`1 action)
       at NServiceBus.Configure.Initialize()
       at NServiceBus.Hosting.GenericHost.Start()
    
    Inner Exception: No connection could be made because the target machine actively refused it 127.0.0.1:10000
       at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
       at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
    
    发生未处理的异常。类型:系统。异常进程ID:2512
    进程名称:WaWorkerHost
    线程ID:6
    \u 0中角色OrderService\u的AppDomain未处理异常
    异常:启动端点时发生异常,已记录错误。原因:无法连接到远程服务器
    在NServiceBus.Hosting.genericost.Start()处
    在NServiceBus.Hosting.Azure.RoleEntryPoint.Run()上
    在Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.StartRoleInternal()上
    在Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.b_u1()中
    在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态,布尔ignoreSyncCtx)
    在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态)
    位于System.Threading.ThreadHelper.ThreadStart()处
    内部异常:无法连接到远程服务器
    在Microsoft.WindowsAzure.Diagnostics.Management.RoleInstanceDiagnosticManager.b__2(对象发送方,ErrorEventArgs args args)
    在Microsoft.WindowsAzure.Diagnostics.ControlChannel.GetControlContainer()上
    位于Microsoft.WindowsAzure.Diagnostics.ControlChannel.set_StartupInfo(DiagnosticMonitorStartupInfo值)
    位于Microsoft.WindowsAzure.Diagnostics.Management.RoleInstanceDiagnosticManager..ctor(CloudStorageAccount-storageAccount,String deploymentId,String roleName,String roleInstanceId)
    在NServiceBus.Integration.Azure.AzureAppender.ConfigureAzureDiagnostics()上
    在NServiceBus.SetLoggingLibrary.Log4Net(配置配置,对象appenderSkeleton)
    在NServiceBus.SetLoggingLibrary.Log4Net[TAppender](配置配置,操作'1初始化Appender)
    at System.Collections.Generic.List`1.ForEach(操作`1操作)
    在NServiceBus.Hosting.Profiles.ProfileManager.ActivateProfileHandlers()上
    at System.Collections.Generic.List`1.ForEach(操作`1操作)
    在NServiceBus.Configure.Initialize()上
    在NServiceBus.Hosting.genericost.Start()处
    内部异常:无法建立连接,因为目标计算机主动拒绝127.0.0.1:10000
    位于System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
    在System.Net.ServicePoint.ConnectSocketInternal(布尔连接失败、套接字s4、套接字s6、套接字和套接字、IP地址和地址、ConnectSocketState状态、IAsyncResult asyncResult、Int32超时、异常和异常)
    
    更新-分辨率:
    问题是,我用作基线的示例项目使用了较旧的连接字符串标识符名称“Diagnostics.ConnectionString”,而NServiceBus Azure Logging Appender正在查找指定诊断存储位置“Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString”的较新Azure标识符重命名标识符解决了问题。

    我是nservicebus中azure支持的作者。让我来帮你弄清楚,一定是出了什么问题,有几种方法可以弄清楚是什么

  • 使用RDP登录到工作进程,并检查机器事件日志中是否存在源自工作进程的任何异常
  • 使用windows azure diagnostics部署并检查写入表存储的日志
  • 使用intellitrace部署并从worker下载堆栈跟踪,以执行远程调试会话

  • 添加了事件日志中的堆栈跟踪。似乎是默认的日志记录配置文件正在尝试登录到本地存储。这是正确的假设吗?是的,看起来diagnostics正在尝试访问开发人员存储。能否为Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString向csdef和cscfg添加设置,并将其指向您的存储帐户?这应该可以修复它。Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString已经指定了存储位置。我还尝试完全删除诊断日志记录。因此,您认为堆栈跟踪中的NServiceBus.Integration.Azure.AzureAppender.ConfigureAzureDiagnostics()调用使用Azure诊断连接字符串登记?是的,Azure appender使用Azure诊断连接字符串(如果可用),否则默认为devstorage。看见因此,看起来它在configuration.PS中找不到connectionstring:使用开发概要文件将登录到控制台而不是dev存储,该设置将有效地禁用日志记录。