【问题标题】:Azure Functions - To write events from eventhub to Blob StorageAzure Functions - 将 eventthub 中的事件写入 Blob 存储
【发布时间】:2017-03-26 12:12:42
【问题描述】:

我正在尝试将事件从事件中心移动到 Blob 存储。我在 eventhub 上创建了触发器,以便在消息到达事件中心时触发。此外,我已将输出配置为 Blob 存储。现在,我在函数中所做的是:

public static void Run(string myEventHubMessage, out string outputBlob, TraceWriter log)
{
    outputBlob = myEventHubMessage;
}

这将在输出配置中提到的容器中创建一个新的 blob。但是,我想要的是根据 eventthub 消息中存在的数据创建一个具有指定名称的 blob,并且需要在将数据保存到 Azure Blob 时设置内容类型和其他元数据。有人可以帮忙怎么做吗?

问候,

约翰

【问题讨论】:

    标签: c# azure-functions azure-eventhub azure-blob-storage


    【解决方案1】:

    您可能不再需要这样做。 事件中心现在支持开箱即用的管道连接到 blob 存储。

    【讨论】:

      【解决方案2】:

      有多种方式可以配置您的输出绑定。

      如果需要根据事件中心消息属性设置 Blob 路径,可以声明强类型消息

      public class MyEvent
      {
          public string SomeName { get; set; }
          // more properties
      }
      

      然后以声明方式将其绑定到 blob 路径,例如

      {
        "type": "blob",
        "name": "outputBlob",
        "path": "mycontainer/{SomeName}.json",
        "connection": "...",
        "direction": "out"
      },
      

      并相应地修改函数

      public static void Run(MyEvent myEventHubMessage, out MyEvent outputBlob)
      {
          outputBlob = myEventHubMessage;
      }
      

      如果您需要更高级的计算来确定输出路径,可以从function.json 中移除声明式输出绑定并使用命令式绑定:

      public static async Task Run(string myEventHubMessage, Binder binder)
      {
          var path = ...;
          using (var writer = binder.Bind<TextWriter>(new BlobAttribute(path)))
          {
              writer.Write(myEventHubMessage);
          }
      }
      

      如果需要设置Blob的更多属性,绑定ICollector&lt;CloudBlockBlob&gt;

      var collector = binder.Bind<ICollector<CloudBlockBlob>>(new BlobAttribute(path)));
      collector.Add(new CloudBlockBlob { ... });
      

      您应该使用所有这些选项来确定哪种方案适合您。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 2017-12-13
      • 2019-11-27
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 2021-04-30
      相关资源
      最近更新 更多