如何增加天蓝色的时代大小

时间:2018-12-06 13:20:17

标签: azure azure-eventhub

我应该怎么做才能增加纪元的大小?我收到以下错误:

  

com.microsoft.azure.eventhubs.ReceiverDisconnectedException:新增   因此,具有较高纪元“ 1544084492”的接收器被创建   带有纪元“ 1544084474”的接收器已断开连接。如果你是   重新创建接收器,请确保使用更高的纪元。

这是由于天蓝色引起的问题,还是我必须在测试应用程序中进行某些更改?

希望我很清楚。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

有两个原因,其中之一:

您有两个使用相同使用者组的应用程序来访问事件中心。要么重新设计体系结构以拥有一个客户端应用程序,要么为每个客户端使用一个新的使用者组。如果要并行化处理,请从集线器中提取一批事件,然后并行处理它们,同一使用者组上不要有多个读取器。

OR

事件中心在内部将分区从一台主机移动到幕后的另一台主机。在这种情况下,请在您的代码中使用简单的重试,这样就可以了。为此,我使用Polly。实际上,实际上,在重试中包装称为“云”的代码通常是一个好主意。

示例重试策略如下(您需要添加Polly Nuget package):

namespace RetryPolicies
{
    using Microsoft.Extensions.Logging;
    using Polly;
    using Polly.Retry;
    using System;

    public class ExponentialRetryManager
    {
        private static readonly int MAX_RETRIES = 6;
        private RetryPolicy _retryPolicy;

        /// <summary>
        /// An exponential retry manager that will wait as follows between retries:
        ///                     
        //  2 ^ 1 = 2 seconds first, then 
        //  2 ^ 2 = 4 seconds then
        //  2 ^ 3 = 8 seconds then
        //  2 ^ 4 = 16 seconds then
        //  2 ^ 5 = 32 seconds
        //  2 ^ 6 = 64 seconds
        /// </summary>
        public ExponentialRetryManager(ILogger logger, String exceptionName = null)
        {
            _retryPolicy = Policy
                .Handle<Exception>()
                .WaitAndRetry(MAX_RETRIES, retryAttempt =>
                TimeSpan.FromSeconds(Math.Pow(1, retryAttempt)),
                (ex, timeSpan, retryAttempt, context) =>
                {
                    logger.LogWarning($"Warning! [RetryAttempt={retryAttempt.ToString()}],[Ex={ex.ToString()}]");
                });
        }

        /// <summary>
        /// Executes the passed in action using the retry policy in order to
        /// keep attempting to process until the MAX_RETRIES are reached. 
        /// </summary>
        /// <param name="action"></param>
        public void Retry(Action action)
        {
            _retryPolicy.Execute(() => action());
        }
    }
}

,您将其称为:

var retryManager = new ExponentialRetryManager(log);
retryManager.Retry(() => YourMethodToProcessEventHub());