在 Azure 函数中使用 BrokeredMessage 和 ServiceBus 队列触发器

Posted

技术标签:

【中文标题】在 Azure 函数中使用 BrokeredMessage 和 ServiceBus 队列触发器【英文标题】:Using BrokeredMessage with ServiceBus Queue Trigger in Azure Function 【发布时间】:2016-04-19 01:43:30 【问题描述】:

我创建了一个Azure Function,只要有新消息添加到 Azure ServiceBus 队列,就会触发它。 使用此代码可以正常工作:

#r "Newtonsoft.Json"
#load "..\shared\person.csx"

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;

public static void Run(string message, TraceWriter log)

    var person = JsonConvert.DeserializeObject<Person>(message, 
            new JsonSerializerSettings() ContractResolver = new CamelCasePropertyNamesContractResolver());
    log.Verbose($"From DeserializeObject: person.FirstName person.LastName");

我已经看到我也可以像这样将消息绑定到 POCO:

public static void Run(Person message, TraceWriter log)

    log.Verbose($"From DeserializeObject: message.FirstName message.LastName");

现在我想将消息绑定到BrokeredMessage,因为我需要访问消息的属性。

【问题讨论】:

【参考方案1】:

编辑 新 SDK 支持使用 #r directive 的 servicebus sdk

#r "Microsoft.ServiceBus"
using Microsoft.ServiceBus.Messaging;

public static void Run(BrokeredMessage msg, TraceWriter log)

    log.Info($"C# ServiceBus queue trigger function processed message: msg");

旧版本

只需两步:

我创建了一个project.json 文件来添加对WindowsAzure.ServiceBus Nuget 包的引用(请参阅SO Post):


    "frameworks": 
        "net46":
            "dependencies": 
                "WindowsAzure.ServiceBus": "2.7.6"
            
        
    

我添加了对代理消息的引用:

using Microsoft.ServiceBus.Messaging;

public static void Run(BrokeredMessage  message, TraceWriter log)

    log.Verbose("Function has been triggered !!!");

【讨论】:

是的,我花了一些时间才弄清楚如何绑定到代理消息。只是分享信息^^【参考方案2】:

我尝试了 Thomas 的解决方案,但它似乎不再起作用了。

documentation 声明:

此外,以下程序集是特殊的,可以通过 simplename 引用(例如 #r "AssemblyName"):

... Microsoft.ServiceBus

因此,在不触及 project.json 文件的情况下,以下工作:

#r "Microsoft.ServiceBus"

using Microsoft.ServiceBus.Messaging;

public static void Run(BrokeredMessage msg, TraceWriter log)

    log.Info($"C# ServiceBus queue trigger function processed message: msg");

【讨论】:

以上是关于在 Azure 函数中使用 BrokeredMessage 和 ServiceBus 队列触发器的主要内容,如果未能解决你的问题,请参考以下文章

使用 azure 函数从表单数据请求中详细说明并存储在 azure blob 中的多个文件

Azure 函数使用了错误的 DbContext 构造函数

在 Azure 函数中解析 URL

使用多个 Azure 队列触发单个 Azure 函数

如何在 Azure 函数签名中使用强类型 http 方法

在 Azure 函数中使用关联 ID 进行日志记录