2017-09-05 51 views
1

我有一个HTTP触发函数和输出绑定,我使用IAsyncCollector<string> outputEventHubMessagesoutputEventHubMessages.AddAsync("message")将消息发送到事件中心。Azure函数事件集线器绑定重试

如果由于某种原因,事件中心有中断/闪烁并且不接受该消息,Azure功能是否会重试发送?

谢谢。

+0

它取决于触发器的类型。什么是你的功能的触发器? – Mikhail

+0

@Mikhail HTTP - 已添加到问题。 – Chris

回答

0

从我所看到的情况来看,如果另一个输出绑定未能完成其工作(例如,连接到Event Hub),则HTTP绑定将返回500。它不会重试该操作。以下是响应主体的示例:

{ 
    "id": "112a4e4f-2c6b-4b43-85a6-a8d801ca6f23", 
    "requestId": "0c0514e3-27dc-476f-8a85-3c8fe77aa762", 
    "statusCode": 500, 
    "errorCode": 0, 
    "message": "Exception while executing function: Functions.SoFunc -> Error while handling parameter outputEventHubMessage after function returned: -> Put token failed. status-code: 404, status-description: The messaging entity 'sb://tmdevmike.servicebus.windows.net/outeventhub' could not be found.." 
} 

虽然我不能引用任何官方文档。

0

在输出绑定中内置此功能将很好。但是,以下代码片段显示了重试消息到事件中心的示例。的概念是基于追赶上输出错误结合和将消息发送到所述存储队列重试过程:

[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" 
    } 
} 
相关问题