0

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

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

  1. 从 3.2.8 版本下载的示例。
  2. 使用了 AzurePubSub 示例并更改了 Web 和辅助角色中的配置以使用实际存储位置而不是本地开发存储。
  3. 使用本地计算模拟器在本地运行,以验证 Web 角色和辅助角色是否按预期工作。
  4. 部署到生产环境。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。” 重命名标识符解决了这个问题。

4

1 回答 1

0

我是 nservicebus 中 azure support 的作者。让我帮你解决这个问题,一定是出了问题,有几种方法可以找出问题所在。

  1. 使用 RDP 登录到工作进程,并检查机器事件日志中是否存在源自工作进程的异常。
  2. 使用 windows azure 诊断部署并检查写入表存储的日志
  3. 使用 Intellitrace 部署并从工作人员下载堆栈跟踪以进行远程调试会话。
于 2012-10-04T06:46:31.467 回答