我使用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构建的队列触发的Azure功能。当Azure功能收到消息时,它会引发以下异常:
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.
答案 0 :(得分:5)
经过大量谷歌搜索,当我在官方文档中找不到任何内容时,我找到了this excellent post。
显然,通过Azure存储节点SDK对消息进行编码(默认情况下)以及如何通过队列触发的节点功能对其进行解码之间存在不一致。根据上面引用的帖子,Azure Storage SDK默认使用TextXmlQueueMessageEncoder
,而Azure Function期望使用TextBase64QueueMessageEncoder
对邮件进行编码。
手动覆盖默认编码器解决了问题。
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
}
});