在 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 队列触发器的主要内容,如果未能解决你的问题,请参考以下文章