使用Azure存储节点SDK

时间:2018-02-17 22:24:58

标签: node.js azure azure-functions azure-storage-queues

我使用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.

1 个答案:

答案 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
  }
});