有没有办法通过 NodeJS Azure 函数延迟将消息放入 Azure 存储队列?
Is there a way to put a message into an Azure Storage Queue with a delay from a NodeJS Azure Function?
我正在编写带有队列触发器的 JavaScript Azure 函数。当我从队列中收到一条消息时,如果我准备好处理它,我就会这样做。如果我不是,我想将消息延迟 15 分钟放回队列中,这样我至少在 15 分钟内不会再次处理它。
我找到了几个示例,说明如何使用用 C# 编写的函数执行此操作
Implementing Delay Queue using one or more standard FIFO Queues
但我还没有想出如何在 Javascript 中做类似的事情。
我查看了 Azure Storage Queue SDK for NodeJS 并尝试了下面的代码,期望消息在 60 秒内不可见:
const {QueueServiceClient} = require("@azure/storage-queue");
module.exports = async function (context, req) {
const STORAGE_CONNECTION_STRING = process.env["AzureWebJobsStorage"];
const queueServiceClient = QueueServiceClient.fromConnectionString(STORAGE_CONNECTION_STRING);
const queueClient = queueServiceClient.getQueueClient('queue-name');
const data = 'test message';
const buff = new Buffer(data);
const base64data = buff.toString('base64');
queueClient.sendMessage(base64data, {visibilitytimeout: 60})
};
但是,消息仍然enqueued/dequeued立即。
我怎样才能使消息排队,使其在 15 分钟内不会被处理?
我认为以下代码行中存在大小写问题:
queueClient.sendMessage(base64data, {visibilitytimeout: 60})
visibilitytimeout
应该是 visibilityTimeout
.
能否请您尝试使用以下代码:
queueClient.sendMessage(base64data, {visibilityTimeout: 60})
有关详细信息,请参阅 MessagesEnqueueOptionalParams
:https://github.com/Azure/azure-sdk-for-js/blob/ee728d567b6a2aa73c83fcd68fc1557a6fb3072c/sdk/storage/storage-queue/src/generated/src/models/index.ts。
我正在编写带有队列触发器的 JavaScript Azure 函数。当我从队列中收到一条消息时,如果我准备好处理它,我就会这样做。如果我不是,我想将消息延迟 15 分钟放回队列中,这样我至少在 15 分钟内不会再次处理它。
我找到了几个示例,说明如何使用用 C# 编写的函数执行此操作
Implementing Delay Queue using one or more standard FIFO Queues
但我还没有想出如何在 Javascript 中做类似的事情。
我查看了 Azure Storage Queue SDK for NodeJS 并尝试了下面的代码,期望消息在 60 秒内不可见:
const {QueueServiceClient} = require("@azure/storage-queue");
module.exports = async function (context, req) {
const STORAGE_CONNECTION_STRING = process.env["AzureWebJobsStorage"];
const queueServiceClient = QueueServiceClient.fromConnectionString(STORAGE_CONNECTION_STRING);
const queueClient = queueServiceClient.getQueueClient('queue-name');
const data = 'test message';
const buff = new Buffer(data);
const base64data = buff.toString('base64');
queueClient.sendMessage(base64data, {visibilitytimeout: 60})
};
但是,消息仍然enqueued/dequeued立即。
我怎样才能使消息排队,使其在 15 分钟内不会被处理?
我认为以下代码行中存在大小写问题:
queueClient.sendMessage(base64data, {visibilitytimeout: 60})
visibilitytimeout
应该是 visibilityTimeout
.
能否请您尝试使用以下代码:
queueClient.sendMessage(base64data, {visibilityTimeout: 60})
有关详细信息,请参阅 MessagesEnqueueOptionalParams
:https://github.com/Azure/azure-sdk-for-js/blob/ee728d567b6a2aa73c83fcd68fc1557a6fb3072c/sdk/storage/storage-queue/src/generated/src/models/index.ts。