当前位置: 首页 > 知识库问答 >
问题:

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

闾丘书
2023-03-14

我可能错过了这个问题的一些明显的东西,但是我似乎无法将endpoint部署为一个Azure辅助角色来在正式生产环境中工作;它在本地Azure模拟器下工作得很好。

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

  1. 从3.2.8版本下载了示例。
  2. 使用AzurePubSub示例,并更改了Web和辅助角色中的配置,以使用实际的存储位置,而不是本地开发存储。
  3. 使用本地计算模拟器在本地运行,以验证Web角色和辅助角色是否按预期工作。
  4. 部署到正式生产环境. web角色工作,并按预期将消息放置在队列中,但辅助角色不处理消息。

没有例外,工人角色按预期部署和启动;它似乎无法处理消息。

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

更新:我看到下面的日志条目在角色的事件日志中。问题仅仅在于默认日志记录配置文件试图访问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)

更新-解决方案:问题是,我用作基线的示例项目使用了较旧的连接字符串标识符名称“诊断”。ConnectionString"和NServiceBus Azure日志应用程序正在寻找指定诊断存储位置的较新的Azure标识符"Microsoft.WindowsAzure.插件。诊断。ConnectionString."重命名标识符解决了此问题。

共有1个答案

后凯捷
2023-03-14

我是nservicebus中Azure支持的作者。让我帮你弄清楚这一点,一定有什么地方出错了,有几种方法可以弄清楚是什么。

  1. 使用RDP登录到工作进程,并检查机器事件日志中是否存在源自工作进程的任何异常
  2. 使用windows azure diagnostics部署并检查写入表存储的日志
  3. 使用intellitrace部署并从worker下载堆栈跟踪,以执行远程调试会话
 类似资料:
  • 在我们的应用程序中,我们使用自定义角色访问aws API。在开发者环境中,我们在app.config中提供访问密钥和秘密密钥,它工作得很好。 在prod环境中,我们设置了一个IAM角色,该角色对自定义角色具有必要的权限,EC2实例将使用该IAM角色启动。当我们尝试使用代码切换角色时,我们会遇到以下错误 消息:用户:arn:aws:sts::XXXXXXXXX:假定角色//i-0490fbbb5ea

  • 我有两个辅助角色设置为nservicebus终结点(nservicebus 3.2.8),并且都对大于Azure队列分配大小的消息使用AzureDataBus配置。我的雇主不允许在配置中放置凭据,因此使用IProvideo配置来配置存储凭据。 这似乎是可行的,但是nservicebus似乎仍在尝试使用本地开发存储连接初始化数据总线通道,这导致工作角色多次重新启动。最终,它启动并选择正确的配置。 关

  • 我无法在注释中使用方法。还有给出。我错过了什么?尽管工作正常。 我正在从数据库中为用户分配权限。

  • 我正在尝试让Spring Security角色与websphere自由一起工作。我知道我的自由设置是正确的,因为我编写了一个非常简单的servlet 3应用程序,它具有基于角色的限制,并且在同一台服务器上使用相同的角色限制。 以下是我的安全配置的相关部分: 上面是在服务器日志中打印出“使用容器管理”,所以我知道这:) 在我的控制器中,我传入了主体: 但是当我打电话的时候: 我什么也没得到。 以下是

  • 我正在使用改型2.0在Android上构建一个Bitbucket REST客户端。 就我而言,OAuth2.0提供了“隐式授权”,当用户在提示下登录到他们的帐户时,它立即向客户机提供访问承载令牌。 承载令牌是可用于访问受保护资源的令牌。任何拥有承载令牌的人与其他拥有承载令牌的人一样,都有权访问受保护的资源。(根据IETF的这份文件) 如果我错了,请纠正我,但我认为使用隐式授权,在用户登录到他们的B

  • 获取错误 引起原因:org.springframework.beans.BeanInstantiationExc0019:未能实例化[software.amazon.awssdk.services.dynamodb.DynamoDbClient]:工厂方法'amazonDynamoDB'抛出异常;嵌套异常java.lang.NullPointerExc0019: STS客户端不得为空。atspri