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

由于数据总线配置问题,azure重新启动中的nservicebus工作角色

彭烨烁
2023-03-14

我有两个辅助角色设置为nservicebus终结点(nservicebus 3.2.8),并且都对大于Azure队列分配大小的消息使用AzureDataBus配置。我的雇主不允许在配置中放置凭据,因此使用IProvideo配置来配置存储凭据。

这似乎是可行的,但是nservicebus似乎仍在尝试使用本地开发存储连接初始化数据总线通道,这导致工作角色多次重新启动。最终,它启动并选择正确的配置。

关于如何配置数据总线通道,我是否做了一些不正确的事情?

以下是工作人员角色的事件日志中的异常:

An unhandled exception occurred. Type: System.Exception Process ID: 2420
Process Name: WaWorkerHost
Thread ID: 6
AppDomain Unhandled Exception for role My.WorkerRole.Assembly_IN_1
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.StorageClient.Tasks.Task`1.get_Result()
   at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait()
   at Microsoft.WindowsAzure.StorageClient.CloudBlobContainer.CreateIfNotExist(BlobRequestOptions options)
   at NServiceBus.DataBus.Azure.BlobStorage.BlobStorageDataBus.Start()
   at System.EventHandler.Invoke(Object sender, EventArgs e)
   at NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start(Action startupAction)
   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)

它会立即导致进程终止:

Application: WaWorkerHost.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Exception
Stack:
   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(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Threading.ThreadHelper.ThreadStart()

以下是我的endpoint配置:

internal class EndpointConfig : IConfigureThisEndpoint, AsA_Worker, IWantCustomInitialization
    {
        #region IWantCustomInitialization Members

        public void Init()
        {
            Configure.With()
                     .DefaultBuilder()
                     .AzureConfigurationSource()
                     .MessageForwardingInCaseOfFault()
                     .AzureMessageQueue()
                     .JsonSerializer()
                     .AzureDataBus()
                     .AzureSubcriptionStorage()
                     .UnicastBus()
                     .DisableTimeoutManager()
                     .DisableSecondLevelRetries()
                     .IsTransactional(true)
                     .IsolationLevel(System.Transactions.IsolationLevel.ReadCommitted)
                     .PurgeOnStartup(false);
            }
}

数据总线配置覆盖:

 public class ConfigOverride : IProvideConfiguration<AzureDataBusConfig>
    {

        AzureDataBusConfig IProvideConfiguration<AzureDataBusConfig>.GetConfiguration()
        {
            return new AzureDataBusConfig()
            {
                ConnectionString = "my storage key";
            };
        } 

    }

共有1个答案

孙博艺
2023-03-14

听起来像是初始化逻辑中的计时问题,基本上是在nsb应用配置覆盖之前调用AzureDataBus(),然后返回默认设置。您可以尝试将IWantCustomInitialization放在一个单独的类中(稍后再运行)。

如果这没有帮助,请随时给我发送一个小再现,我将看看它!

附言:你可以省略。With()。DefaultBuilder(),因为这是默认设置!

亲切的问候,伊夫

 类似资料:
  • 我可能错过了这个问题的一些明显的东西,但是我似乎无法将endpoint部署为一个Azure辅助角色来在正式生产环境中工作;它在本地Azure模拟器下工作得很好。 以下是我使用nservicebus示例附带的一个示例项目复制此问题所采取的步骤: 从3.2.8版本下载了示例。 使用AzurePubSub示例,并更改了Web和辅助角色中的配置,以使用实际的存储位置,而不是本地开发存储。 使用本地计算模拟

  • 问题内容: 我当时使用python和matplotlib,但是我的脚本崩溃了,所以我不得不关闭终端(Ubuntu 12.04,matplotib-1.1.0,python2.7)。现在,如果我尝试运行任何脚本,它都会崩溃 有以下错误 注意最后一行。我尝试从源代码以及pip和easy_install中删除并重新安装matplotlib,但是我无法摆脱。如果我尝试从python解释器中导入,则会发生相

  • 错误: hive-site.xml

  • Kubernetes文档以及关于重新启动策略的Openshift文档显示,可以使用Always、Never或OnFailure配置POD。 那么我如何从部署配置中做到这一点呢?

  • 我对azure资源有问题。我有一个资源组,有两个web应用,一个是WebApp Api,第二个是service bus的WebApp。 直到昨天,我才意识到这个问题的存在。事件的动态如下。 在一些特定的场景中,当我更新我的应用程序接口(只有应用程序接口)时,我运行了一个新版本,它部署了新内容并重启了网络应用程序(在这种情况下,管道的目标是应用程序接口和服务),但是昨天我意识到如果我更新了应用程序接

  • 詹金斯版本:詹金斯版本。2.32.1谷歌登录插件版本:1.3 我在重新启动jenkins后出现了这个错误,有人能建议我如何解决吗? 问题是: -我已经确保,在插件目录我有谷歌登录插件启用 -我没有改变插件上的任何东西,只是直接重启 -我已经很久没有重新开始jenkins了