gpt4 book ai didi

node.js - 使用 Azure 存储 Node SDK 创建队列消息时,队列触发的 Azure 函数抛出异常

转载 作者:搜寻专家 更新时间:2023-11-01 00:20:04 24 4
gpt4 key购买 nike

我使用Azure Storage Node SDK将消息添加到 Azure 存储队列。按照官方示例,我的代码如下所示:

const AzureStorage = require('azure-storage');
const queueService = AzureStorage.createQueueService();

queueService.createMessage('taskqueue', 'Hello world!', function (error) {
if (!error) {
// Message inserted
}
});

这会向 taskqueue 队列添加一条消息,该队列又会触发使用 Node.js 构建的队列触发的 Azure Functions。当Azure Function收到消息时,它会抛出以下异常:

Exception while executing function: Functions.Function2. 
Microsoft.Azure.WebJobs.Host: Exception binding parameter 'queuedMessage'.
mscorlib: The input is not a valid Base-64 string as it contains a non-base
64 character, more than two padding characters, or an illegal character
among the padding characters.

最佳答案

经过大量谷歌搜索后,当我在官方文档中找不到任何内容时,我发现了 this excellent post .

显然,通过 Azure 存储 Node SDK 编码消息的方式(默认情况下)与通过队列触发 Node 函数解码消息的方式之间存在不一致。根据上面引用的帖子,Azure 存储 SDK 默认使用 TextXmlQueueMessageEncoder,而 Azure Function 希望使用 TextBase64QueueMessageEncoder 对消息进行编码。

@azure/storage-queue lib

新队列库中也存在不一致的情况。在这个库中,我无法找到切换编码器的内置方法,但手动对字符串进行 Base64 编码可以解决问题:

const { QueueServiceClient } = require("@azure/storage-queue")

const base64Encode = (str) => Buffer.from(str).toString('base64')

const queueServiceClient = new QueueServiceClient(...)
queueServiceClient.getQueueClient('myqueue').sendMessage(base64Encode('Hello World!'))

azure-storage lib

在旧库中,手动覆盖默认编码器可以解决问题。

const AzureStorage = require('azure-storage');
const QueueMessageEncoder = AzureStorage.QueueMessageEncoder;

const queueService = AzureStorage.createQueueService();
queueService.messageEncoder = new QueueMessageEncoder.TextBase64QueueMessageEncoder();
queueService.createMessage('taskqueue', 'Hello world!', function(error) {
if (!error) {
// Message inserted
}
});

关于node.js - 使用 Azure 存储 Node SDK 创建队列消息时,队列触发的 Azure 函数抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48846538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com