2016-10-27 34 views
1

後市展望: 使用與當一個新的事件在正在添加EventHubTrigger-CSHARP模板運行的功能應用偏移Azure中EventHubTrigger功能應用

實現: 運用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(到目前爲止的作品)。可能我需要另一種方法?

感謝名單對於任何輸入,拉敏

回答

2

@Ramin到文件的功能要求,我試圖重新與你相似的場景,但不能攝製的問題。以下是具體步驟:

  1. 設置事件樞紐觸發功能(使用最新版本爲0.7的2016年10月27日)

  2. 設置一個簡單的控制檯應用程序發送者發送10我的活動中心帶時間戳和消息ID的消息。每條消息發送相隔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

更新到v0.7後,它工作。我的動態json對象也存在問題(迄今爲止沒有任何警告),所以顯然你是正確的,假設函數沒有正確完成。現在它按照我的預期工作。謝謝你的詳細檢查,Ramin。 – 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按預期工作(請參閱Ling的回答和我的評論)。 – Ramin

+0

@Ramin - 事件中心使用遊標。它不讀取「最新」,它從閱讀器的光標讀取。換一種方式;如果您的作者發送了100個事件(並且沒有閱讀器),然後您啓動了一個閱讀器,即使它們是在閱讀器啓動之前發送的,它也會接收這100個事件。 –