Azure EventHub и долговечные функции
Буквально пытаюсь сделать что-то, в чем я не силен.
Я ознакомился с обзором надежных функций здесь - https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview.
Есть тема об использовании привязок для использования ее в триггере концентратора событий, но на самом деле это не рабочий пример, я следовал тому, что там было, и придумал эту привязку в моем function.json,
{
"bindings": [
{
"type": "eventHubTrigger",
"name": "myEventHubMessage",
"direction": "in",
"path": "testinhub",
"connection": "Endpoint=sb://dev-testingeventhubinns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=lLassdff5Y/esH8/CaXDOWH0jF2JtZBQhQeFoCtfqYs=",
"consumerGroup": "$Default"
},
{
"type": "eventHub",
"name": "outputEventHubMessage",
"connection": "Endpoint=sb://dev-testingeventhuboutns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=4yuasdff7Lzu+mQJFVlnlozUItqFY1L3WW/kJnpTjq8=",
"path": "testouthub",
"direction": "out"
}
],
"disabled": false,
"entryPoint": "EventTriggerFunction.EventHubTriggerClass.Run"
}
Мой код в целом выглядит следующим образом,
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.Azure.EventHubs;
using System;
namespace EventTriggerFunction
{
public static class EventHubTriggerClass
{
[FunctionName("EventHubTrigger")]
public static async Task<List<string>> Run([OrchestrationTrigger] DurableOrchestrationContext context)
{
await context.CallActivityAsync<string>("EventHubTrigger_Send", "Hello World");
return null;
}
[FunctionName("EventHubTrigger_Send")]
public static void SendMessages([EventHubTrigger("testinhub", Connection = "ConnectionValue")] EventData[] eventHubMessages, ILogger log)
{
var exceptions = new List<Exception>();
foreach (EventData message in eventHubMessages)
{
try
{
log.LogInformation($"C# Event Hub trigger function processed a message: {Encoding.UTF8.GetString(message.Body)}");
}
catch (Exception e)
{
// We need to keep processing the rest of the batch - capture this exception and continue.
// Also, consider capturing details of the message that failed processing so it can be processed again later.
exceptions.Add(e);
}
}
}
}
}
Если я отправляю сообщение с помощью этой функции, я не вижу его в своем концентраторе событий testouthub. Не совсем уверен, как эта функция Durable и Event Hub Trigger работают рука об руку.
1 ответ
Я думаю, что вы немного перепутали. При использовании таких атрибутов, как FunctionName и EventHubTrigger, вам не нужно указывать function.json. Это либо function.json, либо с атрибутами.
Если вы пытаетесь получать сообщения от одного концентратора событий и передавать его следующему, то что-то подобное ниже также поможет. Для этого не нужно использовать DurableFunctions, и время выполнения функции Azure будет масштабироваться само по себе, если сообщений много, см. Это
[FunctionName("EventHubTriggerCSharp")]
[return: EventHub("outputEventHubMessage", Connection = "EventHubConnectionAppSetting")]
public static void Run([EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] string myEventHubMessage, ILogger log)
{
log.LogInformation($"C# Event Hub trigger function processed a message: {myEventHubMessage}");
return myEventHubMessage;
}
Дополнительный совет: я бы не вставил вашу полную строку подключения в Stackru. Может быть, имеет смысл немедленно создать новые ключи доступа для ваших центров событий.