【问题标题】:Setting the OperationTimeOut property for a Service bus worker role为服务总线辅助角色设置 OperationTimeOut 属性
【发布时间】:2014-06-25 18:57:15
【问题描述】:

我正在使用服务总线辅助角色模板创建辅助角色。

我处理每条消息需要一分钟多的时间。

因此,我看到工人角色多次收到相同的消息,大约每分钟收到一条消息。

我想这是因为这个值默认为 60 秒。

http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.messagingfactorysettings.operationtimeout.aspx

但我不确定如何增加此值,因为我在任何地方都没有看到 messageFactorySettings 类。

我在哪里设置这个属性?

这是我正在使用的代码

public class WorkerRole : RoleEntryPoint
    {

        // QueueClient is thread-safe. Recommended that you cache 
        // rather than recreating it on every request
        QueueClient Client;
        ManualResetEvent CompletedEvent = new ManualResetEvent(false);

        public override void Run()
        {

            Client.OnMessage((receivedMessage) =>
                {
                    ProcessMessage(recievedMessage);
                });

            CompletedEvent.WaitOne();
        }

        public override bool OnStart()
        {
            ServicePointManager.DefaultConnectionLimit = 12;

            string connectionString = ConfigurationUtility.GetConnectionString("Microsoft.ServiceBus.ConnectionString");
            string queneName = ConfigurationUtility.GetConnectionString("QueueName");

            // Create the queue if it does not exist already
            var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
            if (!namespaceManager.QueueExists(queneName))
            {
                namespaceManager.CreateQueue(queneName);

            }

            Client = QueueClient.CreateFromConnectionString(connectionString, queneName);
            return base.OnStart();
        }

        public override void OnStop()
        {
            // Close the connection to Service Bus Queue
            Client.Close();
            CompletedEvent.Set();
            base.OnStop();
        }
    }

【问题讨论】:

    标签: c# .net azure azure-worker-roles servicebus


    【解决方案1】:

    使用 ConnectionStringBuilder 比自己创建 MessagingFactory 的必要地址更容易使用:

    var builder = new  ServiceBusConnectionStringBuilder(_connectionString)
    {
    OperationTimeout = TimeSpan.FromMinutes(2) 
    };
    
    var messagingFactory = MessagingFactory.CreateFromConnectionString(builder.ToString());
    var queueClient = MessagingFactory.CreateQueueClient(_queuePath);
    

    【讨论】:

      【解决方案2】:

      据我所知,您需要使用 MessagingFactory 类来执行此操作。

      我刚刚编写了以下内容以将超时时间增加到 2 分钟:

      MessagingFactorySettings settings = new MessagingFactorySettings { 
                      OperationTimeout = new TimeSpan(0, 2, 0), 
                      TokenProvider = TokenProvider.CreateSharedSecretTokenProvider("issuer", "sharedkey") };
      
      var address = ServiceBusEnvironment.CreateServiceUri("sb", "serviceNamespace", string.Empty);
      
      var messagingFactory = MessagingFactory.Create(address, settings);
      
      return messagingFactory.CreateSubscriptionClient("queueName");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-28
        • 1970-01-01
        • 2012-07-28
        • 2013-03-21
        • 2013-11-09
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多