我希望你能帮助我。
我是 Azure 的新手,在理解它时遇到了很多麻烦。我正在尝试编写一个 Azure 函数,该函数使用 EventHubTrigger 触发(当新事件发送到 eventHub 时),并将该事件存储在 cosmos db 的表中。(cosmos db 作为输出)。
我用C#写这个函数。json是自动创建的,我无法编辑它。我似乎无法正确设置触发器和输出绑定。
这是我的功能代码:
[FunctionName("InsertEvent")]
public static void Run(
[EventHubTrigger("WaterlyNamespace",
Connection = "connectionStr")] string eventHubString,
[CosmosDB(
databaseName: "waterly_db",
collectionName: "water_table",
Id = "device_id",
ConnectionStringSetting = "conStr" )] out dynamic dbItem,
ILogger log)
{
log.LogInformation("C# trigger function processed an event from eventhub");
EventItem dataJson = JsonConvert.DeserializeObject<EventItem>(eventHubString);
//adding timestamp to event json
dataJson.timestamp = DateTime.Now;
dbItem = dataJson;
}
这是生成的function.json:
{
"generatedBy": "Microsoft.NET.Sdk.Functions-3.0.3",
"configurationSource": "attributes",
"bindings": [
{
"type": "eventHubTrigger",
"connection": "ConnectionStr",
"eventHubName": "WaterlyNamespace",
"name": "eventHubString"
}
],
"disabled": false,
"scriptFile": "../bin/Waterly-iot-functions.dll",
"entryPoint": "Waterly_iot_functions.InsertEvent.Run"
}
这是host.json:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
}
}
},
"extensions": {
"cosmosDB": {
"connectionMode": "Gateway",
"protocol": "Https",
"leaseOptions": {
"leasePrefix": "prefix1"
}
}
}
}
这就是我在发布此代码后在Azure门户中看到的:查看图像
知道为什么触发器在Azure门户的输出区域吗?我错过了什么?
非常感谢任何帮助。谢谢,
我认为您对属性中连接字符串的使用有问题。
按照我的步骤,它可以正常工作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.EventHubs;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
namespace FunctionApp54
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([EventHubTrigger("test", Connection = "str")] EventData[] events,
[CosmosDB(
databaseName: "testbowman",
collectionName: "testbowman",
ConnectionStringSetting = "CosmosDBConnection",
PartitionKey = "111")]out dynamic item,
ILogger log)
{
item = new { id = Guid.NewGuid() , custom = "11111111111111111111"};
}
}
}
这是我的local.settings.json:(在local上,env变量在local.settings.json中设置)
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"str": "Endpoint=sb://testbowman.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxx",
"CosmosDBConnection": "AccountEndpoint=https://testbowman.documents.azure.com:443/;AccountKey=xxxxxx;"
}
}
您应该从以下位置获取连接字符串:
然后,我创建一个控制台应用,将事件发送到事件中心。
using System;
using System.Text;
using System.Threading.Tasks;
using Azure.Messaging.EventHubs;
using Azure.Messaging.EventHubs.Producer;
namespace SendEventToEventHub
{
class Program
{
private const string connectionString = "Endpoint=sb://testbowman.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=pftXmTesAa894OWYGZyD5s8GynR9hXVJl7CdbMy45Nc=";
private const string eventHubName = "test";
static async Task Main(string[] args)
{
// Create a producer client that you can use to send events to an event hub
await using (var producerClient = new EventHubProducerClient(connectionString, eventHubName))
{
// Create a batch of events
using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
// Add events to the batch. An event is a represented by a collection of bytes and metadata.
eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes("First event")));
eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes("Second event")));
eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes("Third event")));
// Use the producer client to send the batch of events to the event hub
await producerClient.SendAsync(eventBatch);
Console.WriteLine("A batch of 3 events has been published.");
}
}
}
}
之后,我启动我的函数,我可以在cosmosdb中看到输出:
顺便说一句,如果部署到 azure,则应在下面设置设置,而不是 local.settings.json:
请让我知道,如果你能成功地做到这一点后,尝试上述。祝你好运
我将JSON文档上传到Azure Blob容器中,并编写了Azure Python函数将JSON写入CosmosDB。触发工作正常,但我出错了。下面是Python函数: 以下是function.json文件: 这是我在Azure门户中看到的错误: 结果:失败异常:函数加载错误:无法加载JsonBobTrigger1函数:以下参数在Python中声明,但在function.json中没有声明:{'d
我的Azure Functions事件网格触发器没有触发。我是这么做的。 Key Vault设置为将事件报告给EventGrid系统主题 此主题由将事件传递到Azure Function的订阅订阅 函数有一个事件网格触发器(见下文,默认由门户创建): 我用谷歌搜索了一下,对于这样的入门级方案,没有更多的指导。我想的也许是授权...订阅如何触发该函数?在此过程中(通过GUI /门户配置),没有任何关
我有一个通过使用powershell用ARM模板创建的azure函数。 函数是在消耗计划上运行的blob触发器类型函数,用于将blob从源存储复制到目标存储。 当我将blob上传到源存储时,它不会被复制。这意味着功能没有被执行。 当我通过门户浏览函数应用时,将调用函数并按预期执行所需的操作。此后,它工作正常。仅当函数应用最初由 Powershell 脚本使用 ARM 模板部署时,才会发生这种情况。
我已经实现了一个EventGrid触发器来响应Blob存储事件,其逻辑简化如下: 外部API的响应时间不长(1秒或更短),我对主机的配置设置为默认(因此允许无限数量的并发调用)。 当同时添加多个blob(从只有2个blob开始)时,我在日志中得到了很多重复的事件(脚本正在快速地一个接一个地上传blob,中间没有等待时间)。 我觉得这可能是由于我从不承认收到事件,我不知道我是否应该在我的代码中执行此
我们有一个 Azure 设置,其中包含一个 Azure 事件网格主题,并且我们有一个 Azure 函数服务,其中包含大约 15 个函数,这些函数通过不同的前缀筛选器订阅该主题。Azure 函数服务设置为基于消耗的资源,应该能够根据需要进行缩放。 每个订阅都设置为在最多4小时内尝试交付10次,然后放弃活动。到目前为止一切顺利,设置大部分时间都按预期工作。 在某些情况下,对于我们未知的情况,事件网格主
我对Azure函数的EventHubTrigger有点困惑。 我有一个物联网集线器,我正在使用它与eventhub兼容的endpoint来触发一个Azure函数,该函数将处理和存储接收到的数据。 但是,如果我的函数失败(=抛出异常),在函数调用期间正在处理的消息(或消息)将丢失。实际上,我希望Azure函数运行时在稍后再次处理消息。具体来说,我预计会有这种行为,因为EventHubTrigger正