Azure ServiceBus重试策略不适用于QueueClient

Azure ServiceBus重试策略不适用于QueueClient,azure,azure-functions,servicebus,Azure,Azure Functions,Servicebus,我想限制Azure ServiceBus队列接收器中的重试次数 使用控制台应用程序以MaxRetryCount:3发送消息 private static async Task MainAsync() { string connectionString = ConfigurationManager.AppSettings["ServiceBusConnection"]; QueueClient queueClient = QueueClient.Create

我想限制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次。为什么???

在这种情况下,
RetryPolicy
定义发送操作的重试次数,而不是在接收端

接收方重试金额由队列属性
最大传递计数定义。您可以使用诸如Service Bus Explorer之类的工具在队列级别上进行设置,也可以在创建队列时以编程方式进行设置:

var namespaceManager=namespaceManager.CreateFromConnectionString(connectionString);
var queue=新的QueueDescription(queueName);
queue.MaxDeliveryCount=3;
如果(!namespaceManager.QueueExists(queueName))
namespaceManager.CreateQueue(队列);

在这种情况下,
RetryPolicy
定义发送操作的重试次数,而不是在接收端

接收方重试金额由队列属性
最大传递计数定义。您可以使用诸如Service Bus Explorer之类的工具在队列级别上进行设置,也可以在创建队列时以编程方式进行设置:

var namespaceManager=namespaceManager.CreateFromConnectionString(connectionString);
var queue=新的QueueDescription(queueName);
queue.MaxDeliveryCount=3;
如果(!namespaceManager.QueueExists(queueName))
namespaceManager.CreateQueue(队列);

万一有人想看代码

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();
    }

万一,有人想看代码吗

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();
    }

你应该编辑我的答案,而不是创建一个新的。如果您没有足够的代表,我将复制您的代码。您应该编辑我的答案,而不是创建新答案。我会复制你的代码,以防你没有足够的代表这样做。