как увеличить размер эпохи у лазури - PullRequest
0 голосов
/ 06 декабря 2018

Что я должен сделать, чтобы увеличить размер эпохи?Я получаю следующее сообщение об ошибке:

com.microsoft.azure.eventhubs.ReceiverDisconnectedException: создается новый получатель с более высоким периодом '1544084492', следовательно, текущий приемник с периодом '1544084474' отключается.Если вы воссоздаете приемник, убедитесь, что используется более высокая эпоха.

Это проблема из-за лазури, или мне нужно что-то изменить в моем тестовом приложении?

Надеюсь, мне все ясно.

Спасибо за помощь.

1 Ответ

0 голосов
/ 06 декабря 2018

Для этого есть две причины:

У вас есть два приложения, использующие одну и ту же группу потребителей для доступа к концентратору событий.Либо переделайте вашу архитектуру, чтобы иметь одно клиентское приложение, либо используйте новую группу потребителей для каждого клиента.Если вы пытаетесь распараллелить обработку, извлеките пакет событий из концентратора, а затем обработайте их параллельно, не используйте несколько считывателей в одной группе потребителей.

ИЛИ

Концентраторы событий внутренне перемещают разделы от одного хоста к другому за кулисами.В этом случае используйте просто повтор в вашем коде, и это должно работать.Для этого я использую Полли .На самом деле, на практике обычно хорошей идеей является повторение кода, называющего «облако».

Пример политики повторных попыток может быть следующим (необходимо включить пакет Polly Nuget ):

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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...