Политика повторного запуска ServiceBus не работает с QueueClient - PullRequest
0 голосов
/ 08 июня 2018

Я хочу ограничить количество повторных попыток в получателе очереди Azure ServiceBus.

Отправка сообщений с помощью консольного приложения с MaxRetryCount: 3

private static async Task MainAsync()
    {
        string connectionString = ConfigurationManager.AppSettings["ServiceBusConnection"];
        QueueClient queueClient = QueueClient.CreateFromConnectionString(connectionString, QueueName);
        queueClient.RetryPolicy = new RetryExponential(
                minBackoff: TimeSpan.FromSeconds(0),
                maxBackoff: TimeSpan.FromSeconds(30),
                maxRetryCount: 3);

        string tradeData = File.ReadAllText("TradeSchemaDemo.json");
        var message = new BrokeredMessage(tradeData);
        await queueClient.SendAsync(message);
        await queueClient.CloseAsync();
    }

У меня есть другая сторонаФункция Azure для получения сообщения,

public static void run([ServiceBusTrigger("TestQueue", AccessRights.Manage, Connection = "servicebusconnection")]string myqueueitem, TraceWriter log)
    {
        retry++;
        System.Console.WriteLine($"Retry attempt {retry}");
        throw new System.Exception("Human error");
        log.Info($"c# servicebus queue trigger function processed message: {myqueueitem}");
    }

Тем не менее, моя функция вызывает 10 раз.Почему ??

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

На случай, если кто-нибудь захочет увидеть код

private static async Task MainAsync()
    {
        string connectionString = ConfigurationManager.AppSettings["ServiceBusConnection"];
        var nm = NamespaceManager.CreateFromConnectionString(connectionString);
        var queue = new QueueDescription(QueueName);
        queue.MaxDeliveryCount = 3;
        if (!nm.QueueExists(QueueName))
            await nm.CreateQueueAsync(queue);

        QueueClient queueClient = QueueClient.CreateFromConnectionString(connectionString, QueueName);
        string tradeData = File.ReadAllText("TradeSchemaDemo.json");
        var message = new BrokeredMessage(tradeData);
        await queueClient.SendAsync(message);
        await queueClient.CloseAsync();
    }
0 голосов
/ 08 июня 2018

В этом случае RetryPolicy определяет количество повторных попыток для операции отправки, а не на принимающей стороне.

Количество повторных попыток получателя определяется свойством очереди Max Delivery Count.Вы можете установить его на уровне очереди с помощью инструмента, такого как Service Bus Explorer, или программно при создании очереди:

var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
var queue = new QueueDescription(queueName);
queue.MaxDeliveryCount = 3;
if (!namespaceManager.QueueExists(queueName))
    namespaceManager.CreateQueue(queue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...