即时消息寻找编写一个Azure函数,该函数从IoTHub接收消息并根据消息中的数据将其放置在服务总线队列中。问题是,队列名称将根据消息的参数以及我查看的文档(如this)的参数进行更改,所有这些都将队列名称设置为输出设置的一部分。 有没有人根据传入消息中的值做了类似的事情或者有任何代码样本写入队列?我试图设置一个函数,但它甚至不会让我将输出类型设置为服务总线,并且不会将队列名称放入,我不能这样做,因为它不是固定的!Azure函数根据消息数据将消息路由到队列名称
因此,如果输入是:
{
“queue”: “MyQ12345”,
“data”: “some data here”
}
该函数应的数据字段(或整个传入消息)写入到已经存在于相同的订阅/资源组等服务总线队列“MyQ12345” 。 感谢
EDIT1:这里是我有迄今:
所以我试了一下@Mikhail曾建议,这里是我在做什么:
run.csx
using System;
public static string Run(MyPoco myEventHubMessage, TraceWriter log, out string queue)
{
var queueName = myEventHubMessage.QueueName;
queue = queueName;
log.Info($"<IoT Hub => ServiceBus> C# Event Hub trigger function processed a message: {queueName}");
return QueueName;
}
public class MyPoco
{
public string QueueName { get; set; }
public double Other { get; set; }
public double Props { get; set; }
public int Here { get; set; }
}
function.json:
{
"type": "serviceBus",
"name": "$return",
"direction": "out",
"queueName": "{queue}",
"connection": "ServiceBusConnectionString",
"accessRights": "manage"
}
,但是这给了我以下错误:
Microsoft.Azure.WebJobs.Host: Cannot bind parameter 'queue' to type String&. Make sure the parameter Type is supported by the binding.
我得到:... 2017-05-04T09:07:48.239执行函数时发生异常:Functions.cs_IotHubToServiceBusQueue。 Microsoft.Azure.WebJobs.Host:异常绑定参数'_return'。 Microsoft.ServiceBus:无法直接在子队列上创建客户端。在主队列上创建一个客户端,并使用它在适当的子队列上创建接收者。 – LDJ
@LDJ看看你的EDIT1:'{queue}'绑定应该与你的输入消息中的字段匹配,所以它应该是你的POCO的'{queueName}'。在C#函数中不需要'out'参数。并且返回值应该是消息内容(现在您将发送队列名称作为消息体)。 – Mikhail
它的工作。非常感谢您对这一次的帮助。我发现Azure函数的语法非常不直观! – LDJ