簡體   English   中英

Azure功能blob輸入與servicebus觸發器綁定

[英]Azure Function blob input binding with a servicebus trigger

我正在嘗試創建一個在AZ ServiceBus Queue消息上觸發的Azure功能。 該消息包含GUID字符串,與AZ存儲上的BLOB名稱相匹配。 我想通過輸入綁定提供BLOB,但我不確定如何...

我試過了 :

public static async Task Run(
   [ServiceBusTrigger("outgoing-mail", Connection = "QueueConnString")] string inputMessage,
   [Blob("email-messages/{inputMessage}", FileAccess.Read)] Stream mailBlob,
   [SendGrid(ApiKey = "%SendgridApiKey%")] IAsyncCollector<SendGridMessage> messageCollector,
   ILogger log)

我還在blob路徑上嘗試了{serviceBusTrigger},但不管怎樣,我得到以下異常:

Microsoft.Azure.WebJobs.Host:錯誤索引方法'SendMailQueueWorker'。 Microsoft.Azure.WebJobs.Host:無法解析綁定參數'inputMessage'。 綁定表達式必須映射到觸發器提供的值或觸發器綁定的值的屬性,或者必須是系統綁定表達式(例如sys.randguid,sys.utcnow等)。

我確定隊列的輸入消息是一個字符串,如何在BLOB的輸入綁定中使用此消息內容?

[編輯]
我將功能請求添加到UserVoice,所以如果你也遇到這個問題,請投票! https://feedback.azure.com/forums/355860-azure-functions/suggestions/37528912-combine-servicebus-queue-message-with-storage-inpu
[/編輯]

服務總線觸發器不支持這與隊列觸發器的方式不同。
您可以在UserVoice上為此提出功能請求。

有一點需要注意的是,此限制適用於非JSON消息。 如果您發送JSON消息,它將按照文檔進行解析。

你的功能可能是這樣的

using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace funk_csharp_queue
{
  public class QueueMsg
  {
    public string filename { get; set; }
  }
  public static class ServiceBusTrigger
  {
    [FunctionName("ServiceBusTrigger")]
    public static void Run(
      [ServiceBusTrigger("myqueue", Connection = "ServiceBusConnection")] QueueMsg myQueueItem,
      [Blob("samples-workitems/{filename}", FileAccess.Read)] String myBlob,
      ILogger log)
    {
      log.LogInformation($"C# Service Bus trigger function processed: {JsonConvert.SerializeObject(myQueueItem)}");
      log.LogInformation($"C# Blob input read: {myBlob}");
    }
  }
}

您在服務總線隊列/主題中發送的消息將是這樣的

{
  "filename": "11c8f49d-cddf-4b82-a980-e16e8a8e42f8.json"
}

確保將內容類型設置為application/json

我不認為你可以直接做到這一點。 我只想使用CloudBlobContainer 輸入綁定來解決這個問題。

[Blob("email-messages", FileAccess.Read, Connection = "BlobConnectionString")] CloudBlobContainer blobContainer

然后使用blobContainer使用inputMessage讀取函數中的blob。

CloudBlob mailBlob = blobContainer.GetBlobReference(inputMessage);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM