c# - Azure Functions 事件中心绑定(bind)重试

标签 c# azure azure-functions azure-eventhub

我有一个带有输出绑定(bind)的 HTTP 触发函数,我正在使用 IAsyncCollector<string> outputEventHubMessages outputEventHubMessages.AddAsync("message")将消息发送到事件中心。

如果由于某种原因,事件中心发生中断/故障并且不接受消息,Azure Function 是否会重试发送?

谢谢。

最佳答案

如果能在输出绑定(bind)中内置此功能,那就太好了。但是,以下代码片段显示了向事件中心重试消息的示例。这个概念基于捕获输出绑定(bind)上的错误并向存储队列发送消息以重试过程:

    [FunctionName("Function4")]       
    public static async Task<HttpResponseMessage> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestMessage req,
        [EventHub("%EventHub%", Connection = "connectionEventHub")] IAsyncCollector<string> outputEventHubMessages,
        [Queue("%RetryQueue%")] IAsyncCollector<string> outputQueueRetryMessages,
        TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");

        // Get request body
        string message = JsonConvert.SerializeObject(JObject.Parse(await req.Content.ReadAsStringAsync()));

        try
        {
            await outputEventHubMessages.AddAsync(message);
            await outputEventHubMessages.FlushAsync();
        }
        catch(Exception ex)
        {
            log.Error(ex.Message);
            //await Task.Delay(5000);
            await outputQueueRetryMessages.AddAsync(message);
        }

        return req.CreateResponse(HttpStatusCode.OK);
    }

队列可以在host.json文件中配置:

{
  "queues": {
  "maxDequeueCount": 3,
  "visibilityTimeout": "00:00:30"
  }
}

关于c# - Azure Functions 事件中心绑定(bind)重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46052185/

相关文章:

C# File.ReadAllText 返回 "NotSupportedException"

azure - 将 Service Fabric 应用程序迁移到 Kubernetes

.net - 为什么我使用 localdb 进行的测试在 Azure DevOps 中运行良好?

c# - Azure 上缺少 mvc dll。怎么了?

c# - 查找 .NET 应用程序中的非托管内存泄漏

c# - 如何使用 CancellationToken 属性?

python - 如何在 HTTP 响应中返回 HTML 文件(Azure-Functions)

Azure函数: How to add row to cloud table on blob creating?

c# - 从泛型类继承时什么时候应该使用 new() 关键字?

azure - Azure Functions 中令人费解的存储事务