对于这个问题,我可能遗漏了一些明显的东西,但我似乎无法将端点部署为 azure worker 角色以在生产环境中工作;它在本地 azure 模拟器下运行良好。
以下是我使用 nservicebus 示例附带的示例项目之一复制此问题所采取的步骤:
- 从 3.2.8 版本下载的示例。
- 使用了 AzurePubSub 示例并更改了 Web 和辅助角色中的配置以使用实际存储位置而不是本地开发存储。
- 使用本地计算模拟器在本地运行,以验证 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)
更新 - 解决方案: 问题是我用作基线的示例项目使用了较旧的连接字符串标识符名称“Diagnostics.ConnectionString”,并且 NServiceBus Azure Logging Appender 正在寻找指定诊断存储位置的较新的天蓝色标识符“Microsoft .WindowsAzure.Plugins.Diagnostics.ConnectionString。” 重命名标识符解决了这个问题。