我正在设置一些Azure HTTP触发器函数来接收JSON数据。
我想访问将一些数据向前传递到服务总线队列以进行下游处理。
我已能够将出站绑定添加到服务总线,但无法放置代码以从 HTTp 触发器函数将消息放在队列上,而不会收到 500 内部服务器错误。这是由于函数的异步性质造成的吗?
如何实现调用 HTTP 触发器将数据传递到服务 B 总线队列的功能?
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
if (req.query.name || (req.body && req.body.name)) {
context.log('Incoming data from Webhook' + req);
context.bindings.outputSbMsg = "Message placed on Service Bus Queue";
context.log('Message placed on Service Bus Queue');
context.res = {
// status: 200, /* Defaults to 200 */
body: "Hello " + (req.query.name || req.body.name)
};
}
else {
context.res = {
status: 400,
body: "Please pass a name on the query string or in the request body"
};
}
};
我确实像您一样尝试了部署,但不幸的是,即使只是在运行get查询时,我仍然会遇到500内部服务器错误。
以下是文件在Monent的样子:
函数. json
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"type": "serviceBus",
"direction": "out",
"connection": "iotcwebhookdispatchersbns_SERVICEBUS",
"name": "outboundSBQMsg",
"queueName": "observations-sbq"
}
]
}
索引.js
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
var message = "This is a test SBQ message - from an Azure function!";
context.bindings.outboundSBQMsg = message;
context.res = {
status: 200,
body: "This code is to send message to service bus."
};
};
本地设置. json文件
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "node",
"iotcwebhookdispatchersbns_SERVICEBUS": "Endpoint=sb://iotc-webhook-dispatcher-sbns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=MiIv52YQ6plMVt35vPvx9U5DmsQbTvUXamaeZ/fA2Eg="
}
}
在配置出站服务总线队列时,我发现奇怪的是,我可以从现有命名空间中选择服务总线队列命名空间。我不能在下一步选择实际的队列,即使之前已经创建了观察值sbq。
输入其他一些队列名称,例如test队列,也不起作用。它没有创建并且发生相同的500内部服务器错误,即使直接在门户中测试该函数也是如此。
错误消息:
这是否意味着尚未使用/部署 local.settings.json 文件?
日志文件摘录:
2020-08-28T07:03:46.194 [信息] JavaScript HTTP触发器函数处理了一个请求。2020-08-28T07:03:46.249 [错误] 执行 'Functions.iotc-webhook-dispatcher' (Failed, Id=e248ae01-7a82-485e-bcfe-00ebee6496e0, Duration=14ms) Microsoft Azure WebJobs SDK ServiceBus 连接字符串 'iotcwebhookdispatchersbns_SERVICEBUS' 丢失或为空。2020-08-28T07:07:08.256 [信息] 正在执行 'Functions.iotc-webhook-dispatcher' (Reason='此函数是通过主机 API 以编程方式调用的。', Id=222a675f-8b16-4720-b807-bcc9834d7ddc) 2020-08-28T07:07:08.818 [信息] JavaScript HTTP 触发函数处理了一个请求。2020-08-28T07:07:10.107 [错误] 执行 'Functions.iotc-webhook-dispatcher' (失败, Id=222a675f-8b16-4720-b807-bcc9834d7ddc, Duration=1067ms) Microsoft Azure WebJobs SDK ServiceBus 连接字符串 'iotcwebhookdispatchersbns_SERVICEBUS' 丢失或为空。
下面的代码在我这边运行良好:
函数. json
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "outputSbQueue",
"type": "serviceBus",
"queueName": "testqueue",
"connection": "str",
"direction": "out"
}
]
}
索引.js
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
var message = "This is a test message.";
context.bindings.outputSbQueue = message;
context.res = {
status: 200,
body: "This code is to send message to service bus."
};
};
local.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "node",
"str":"Endpoint=sb://testbowman.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxx="
}
}
然后,你会发现一条消息进入服务总线队列:
我试图按照文档从Azure函数(https://docs.microsoft.com/en-us/Azure/azure-functions/functions-bindings-service-bus-output?tabs=csharp)向Azure服务总线队列写入消息。 我从HTTP触发器的“file->new project”开始,并添加了绑定: 我的host.json和local.set
在.NET core 2.0中使用创建时,我遇到了一个问题。 在体系结构中,当在用于创建用户的队列中创建新消息时,服务必须接收该消息并根据其中的信息在数据库中创建用户。 在Visual Studio2017中,我在下创建了一个新项目。 这种的正确实现是什么?在GitHub上有什么例子吗?提前道谢。
创建了Azure函数,该函数是在Visual Studio中触发并从Visual Studio发布到Azure的服务总线。 每当消息进入队列时,手动运行时,该函数在本地正常运行。但我们的期望是,当消息在队列中时,函数应该自动触发。 我只是手动添加一条新消息,并查看日志,如果函数被自动触发,但它不是。当我检查应用程序洞察时,我发现下面的错误日志 函数“ProcessVideos”的侦听器无法启动。服
我写了C#程序,发送消息到Azure服务总线队列,这是正常工作。现在,我需要通过Azure函数将服务总线队列中收到的消息传递到数据湖,但据我所知,Azure函数不支持数据湖的绑定/触发器。是否有任何方法触发到Azure Data Lake的服务总线队列消息?提前感谢。
我有一个组件,我在其中传递我想要在模态中显示的内容,如下所示: 模态服务如下所示: 在我的popupComponent我有: 现在一切都很好,但是我现在想做的是将一个函数传递给我的服务,以便它使用它。像这样的事情,但我不知道怎么做:
我一直在尝试为Azure函数实现DI,其中函数由ServiceBus触发(本例中为主题/订阅): 我在以下网站上阅读了有关Azure Functions和DI的信息: https://mcguirev10.com/2018/04/03/service-locator-azure-functions-v2.html https://blog.wille-zone.de/post/azure-func