Ram*_*min 5 azure-eventhub azure-iot-hub azure-functions azure-iot-edge
预期: 使用带有 EventHubTrigger-CSharp 模板的函数应用程序会在新事件进入时运行。
实现:使用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}");
}
Run Code Online (Sandbox Code Playgroud)
确实传递事件队列中的“第一个”而不是当前的。
额外的:
问题: 如何在函数应用中接收集线器上的最新事件?
更多信息: 我需要将新信号从事件中心转发到外部 mqtt api(到目前为止有效)。也许我需要另一种方法?
现在有办法了。
注意:为此,您必须删除azure-webjobs-eventhub连接到函数应用的存储帐户中存储的使用者组数据。
我们现在可以使用Microsoft.Azure.Functions.Extensionsnuget 包在 Azure Functions 中使用依赖项注入。
这为我们开辟了一种方法,可以通过执行以下操作来控制 Azure Function App 开始处理事件中心的位置:
using System;
using Microsoft.Azure.EventHubs;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Azure.WebJobs.EventHubs;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
[assembly: FunctionsStartup(typeof(EventHubOffsetTest.Startup))]
namespace EventHubOffsetTest
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.PostConfigure<EventHubOptions>(o => o.EventProcessorOptions.InitialOffsetProvider = GetInitialOffset);
}
private static EventPosition GetInitialOffset(string partitionId)
{
return EventPosition.FromEnd();
}
}
}
Run Code Online (Sandbox Code Playgroud)
@Ramin,我尝试重新创建与您类似的场景,但无法重现该问题。步骤如下:
设置事件中心触发的函数(使用截至 2016 年 10 月 27 日的最新版本 0.7)
设置一个简单的控制台应用程序发送器到我的事件中心,发送 10 条带有时间戳和消息 ID 的消息。每条消息的发送间隔为 6 分钟。这是我的控制台应用程序的输出,用于记录发送的消息,
Run Code Online (Sandbox Code Playgroud)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)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,所有消息均已到达且没有重复。您能否确认您的函数的每次调用(您可以检查您的函数日志),它实际上成功运行完成?
如果您看到以下消息,
Function completed (Success, Id=<some Guid>)
Run Code Online (Sandbox Code Playgroud)
对于您的函数的每次调用,那么该执行的消息应该已被检查点,并且您不应该在下一次调用中再次处理该消息。
但是,如果您没有看到该消息或看到错误消息,则说明函数运行失败,这将导致消息未被检查点。当函数再次被触发时,如果您的函数从未成功处理该消息,它将从最后一个检查点获取,这可能是第一条消息。
| 归档时间: |
|
| 查看次数: |
4472 次 |
| 最近记录: |