Chr*_*son 2 azure node.js azure-storage-queues azure-functions
我使用Azure存储节点SDK将消息添加到Azure存储队列.官方例子之后,我的代码如下:
const AzureStorage = require('azure-storage');
const queueService = AzureStorage.createQueueService();
queueService.createMessage('taskqueue', 'Hello world!', function (error) {
if (!error) {
// Message inserted
}
});
Run Code Online (Sandbox Code Playgroud)
这会向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.
Run Code Online (Sandbox Code Playgroud)
经过相当数量的谷歌搜索,当我在官方文档中找不到任何内容时,我发现了这篇优秀的帖子.
显然,通过Azure存储节点SDK对消息进行编码(默认情况下)以及如何通过队列触发的节点功能对其进行解码之间存在不一致.根据上面引用的帖子,Azure存储SDK默认使用TextXmlQueueMessageEncoder,而Azure功能期望消息使用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
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |