2016-10-27 11 views
1

Expectation: Использование функции приложения с пробегов шаблона EventHubTrigger-Csharp, когда новое событие приходя вСмещение Azure EventHubTrigger Функция App

Реализация:. Использование очень простой пример из https://azure.microsoft.com/en-us/documentation/articles/functions-bindings-event-hubs/

Результат: объясненной метод:

public static void Run(string myEventHubMessage, TraceWriter log) 
{ 
    log.Info($"C# Event Hub trigger function processed a message: {myEventHubMessage}"); 
} 

действительно передает «первый» в очереди событий вместо текущей.

Дополнительно: - я добавил consumerGroup (так не читает от $ По умолчанию) - Согласно этому блогу: http://www.yourcloudbuddy.com/2016/04/azure-functions-and-event-hubs.html 'не существует в настоящее время нет возможности настроить его, чтобы начать конкретное смещение.

Вопрос: Как я могу получить новое событие на концентраторе в моем приложении-функции?

Подробнее: мне нужно передать новые сигналы от концентратора событий на внешний MQTT API (который работает до сих пор). Возможно, мне нужен другой подход?

Thanx для любого входа, Рамин

ответ

2

@Ramin, я попытался воссоздать сценарий, подобный вашему, но не мог Репрографический вопрос. Вот шаги:

  1. Setup Случай Hub срабатывает функция (с использованием последней версии 0.7 от 10/27/2016)

  2. Настройки простого консольного приложения отправитель к моему концентратору событий, который отправляет 10 сообщения с отметками времени и идентификаторами сообщений. Каждое сообщение отправляется 6 минут друг от друга. Вот вывод для моей консоли приложение, которое записывает отправленные сообщения,

Sent message: Timestamp: 10/27/2016 2:27:06 PM, MessageId: 1 
Sent message: Timestamp: 10/27/2016 2:33:07 PM, MessageId: 2 
Sent message: Timestamp: 10/27/2016 2:39:07 PM, MessageId: 3 
Sent message: Timestamp: 10/27/2016 2:45:07 PM, MessageId: 4 
Sent message: Timestamp: 10/27/2016 2:51:08 PM, MessageId: 5 
Sent message: Timestamp: 10/27/2016 2:57:08 PM, MessageId: 6 
Sent message: Timestamp: 10/27/2016 3:03:08 PM, MessageId: 7 
Sent message: Timestamp: 10/27/2016 3:09:08 PM, MessageId: 8 
Sent message: Timestamp: 10/27/2016 3:15:08 PM, MessageId: 9 
Sent message: Timestamp: 10/27/2016 3:21:08 PM, MessageId: 10 
Stopped sending messages. 

Вот записи журнала для моей функции,

2016-10-27T21:27:26.516 Function started (Id=d5ed0e23-2b0e-4e0b-a858-f1e497dcac8c) 
2016-10-27T21:27:26.516 C# Event Hub trigger function processed a message: Timestamp: 10/27/2016 2:27:06 PM, MessageId: 1 
2016-10-27T21:27:26.516 Function completed (Success, Id=d5ed0e23-2b0e-4e0b-a858-f1e497dcac8c) 
2016-10-27T21:33:26.667 Function started (Id=9525a046-86fb-4499-9d4f-b0d0fd0d0829) 
2016-10-27T21:33:26.667 C# Event Hub trigger function processed a message: Timestamp: 10/27/2016 2:33:07 PM, MessageId: 2 
2016-10-27T21:33:26.667 Function completed (Success, Id=9525a046-86fb-4499-9d4f-b0d0fd0d0829) 
2016-10-27T21:39:42.074 Function started (Id=e2d528c9-f1b9-41aa-9c38-669c57c8182a) 
2016-10-27T21:39:42.074 C# Event Hub trigger function processed a message: Timestamp: 10/27/2016 2:39:07 PM, MessageId: 3 
2016-10-27T21:39:42.074 Function completed (Success, Id=e2d528c9-f1b9-41aa-9c38-669c57c8182a) 
2016-10-27T21:45:26.794 Function started (Id=ff5325af-5dab-48fb-95b1-8318fada3c8c) 
2016-10-27T21:45:26.794 C# Event Hub trigger function processed a message: Timestamp: 10/27/2016 2:45:07 PM, MessageId: 4 
2016-10-27T21:45:26.794 Function completed (Success, Id=ff5325af-5dab-48fb-95b1-8318fada3c8c) 
2016-10-27T21:51:26.875 Function started (Id=01d3fbf9-b772-4076-8fbf-783dc16677a7) 
2016-10-27T21:51:26.875 C# Event Hub trigger function processed a message: Timestamp: 10/27/2016 2:51:08 PM, MessageId: 5 
2016-10-27T21:51:26.875 Function completed (Success, Id=01d3fbf9-b772-4076-8fbf-783dc16677a7) 
2016-10-27T21:57:26.989 Function started (Id=443d96e6-af97-460a-9f70-9dbc2eaf2f37) 
2016-10-27T21:57:26.989 C# Event Hub trigger function processed a message: Timestamp: 10/27/2016 2:57:08 PM, MessageId: 6 
2016-10-27T21:57:26.989 Function completed (Success, Id=443d96e6-af97-460a-9f70-9dbc2eaf2f37) 
2016-10-27T22:03:27.088 Function started (Id=9eefe03d-8e78-4119-a453-96655ea01824) 
2016-10-27T22:03:27.088 C# Event Hub trigger function processed a message: Timestamp: 10/27/2016 3:03:08 PM, MessageId: 7 
2016-10-27T22:03:27.088 Function completed (Success, Id=9eefe03d-8e78-4119-a453-96655ea01824) 
2016-10-27T22:10:01.872 Function started (Id=34c9b277-059d-4839-9dce-aeb03afb2871) 
2016-10-27T22:10:01.872 C# Event Hub trigger function processed a message: Timestamp: 10/27/2016 3:09:08 PM, MessageId: 8 
2016-10-27T22:10:01.872 Function completed (Success, Id=34c9b277-059d-4839-9dce-aeb03afb2871) 
2016-10-27T22:15:27.706 Function started (Id=50eda659-c68f-4e61-a942-32160668fd5c) 
2016-10-27T22:15:27.706 C# Event Hub trigger function processed a message: Timestamp: 10/27/2016 3:15:08 PM, MessageId: 9 
2016-10-27T22:15:27.706 Function completed (Success, Id=50eda659-c68f-4e61-a942-32160668fd5c) 
2016-10-27T22:21:52.162 Function started (Id=fa8f8059-013f-42f9-8047-391d4e3fb4a3) 
2016-10-27T22:21:52.162 C# Event Hub trigger function processed a message: Timestamp: 10/27/2016 3:21:08 PM, MessageId: 10 
2016-10-27T22:21:52.162 Function completed (Success, Id=fa8f8059-013f-42f9-8047-391d4e3fb4a3) 

Как вы можете видеть, все сообщения поступали без дублирования. Можете ли вы подтвердить, что каждый вызов вашей функции (вы можете проверить свои журналы функций), что она действительно успешно завершилась до завершения?

Если вы видите следующее сообщение,

Function completed (Success, Id=<some Guid>) 

для каждого вызова вашей функции, то сообщение (s) для этого исполнения должна была проверка однонаправленным, и вы не должны обрабатывать сообщение (s) снова в следующем вызове.

Однако, если вы не видите сообщение или не видите сообщение об ошибке, прогон функции завершился неудачно, что приведет к тому, что сообщение (-и) не будет отмечено. Когда функция снова активируется, она будет подниматься с последней контрольной точки, которая может быть сообщена первым, если вашей функции никогда не удавалось обработать это сообщение.

+0

После обновления до версии v.7.7 это сработало. У меня также была проблема с моим динамическим json-объектом (пока не было предупреждений), поэтому, очевидно, вы были правы с предположением, что функция не была выполнена правильно. Теперь он работает так, как должен, согласно моим ожиданиям. Спасибо за подробный экзамен, Рамин. – Ramin

1

EventHub прослушивание на основе классе EventProcessorHost (https://msdn.microsoft.com/en-us/library/azure/microsoft.servicebus.messaging.eventprocessorhost.aspx) и имеет ту семантику по умолчанию. Вы правы, вы не можете контролировать начальное смещение. Он просто начинает слушать и проверять контрольные точки.

Мы также отслеживать дополнительную информацию на вики: https://github.com/Azure/azure-webjobs-sdk/wiki/EventHub-support

Вы также можете подать запросы на новые функции в https://github.com/Azure/azure-webjobs-sdk/issues/

+0

В этом случае я не понимаю смысл запуска приложения функции-события. Поскольку myEventHubMessage содержит ровно одно событие, я ожидал, что «новый» появится (тот, который вызвал функцию). Вместо этого он содержит «первый» в очереди. – Ramin

+0

Приложение EventHubTrigger for Function работает как ожидается (см. Ответ Линга с моим комментарием). – Ramin

+0

@Ramin - event hubs использует курсор. Он не читает «последний», он читается из курсора читателя. Перефразируй; если ваш автор отправляет 100 событий (и ни один из них не читается), а затем вы запустите читателя, он заберет эти 100 событий, даже если они были отправлены до того, как был запущен читатель. –

 Смежные вопросы

  • Нет связанных вопросов^_^