Azure EventHub и долговечные функции - PullRequest
0 голосов
/ 01 февраля 2019

Буквально пытаюсь разобраться с чем-то, в чем я не силен.

Я ознакомился с обзором долговременных функций здесь - 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 и EventHub Trigger работают рука об руку.

1 Ответ

0 голосов
/ 01 февраля 2019

Я думаю, вы немного перепутали.При использовании таких атрибутов, как FunctionName и EventHubTrigger, вам не нужно указывать function.json.Это либо function.json, либо с атрибутами.

Если вы пытаетесь получать сообщения от одного концентратора событий и передавать его следующему, то что-то подобное ниже также поможет.Для этого нет необходимости использовать DurableFunctions, и время выполнения функции Azure будет масштабироваться само по себе, если имеется много сообщений, см. this

[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;
}

Дополнительный совет: я не вставил бы вашу полнуюстрока подключения в StackOverflow.Может быть, имеет смысл немедленно создать новые ключи доступа для ваших концентраторов событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...