【问题标题】:Is there a way to put a message into an Azure Storage Queue with a delay from a NodeJS Azure Function?有没有办法通过 NodeJS Azure 函数延迟将消息放入 Azure 存储队列?
【发布时间】:2020-02-25 09:06:33
【问题描述】:

我正在编写一个带有队列触发器的 JavaScript Azure 函数。当我从队列中收到消息时,如果我准备好处理它,我就会这样做。如果不是,我想延迟 15 分钟将消息放回队列中,这样至少 15 分钟后我不会再次处理它。

我找到了几个例子,说明如何使用用 C# 编写的函数来做到这一点

Implementing Delay Queue using one or more standard FIFO Queues

Setting the VisibilityTimeout for a Message added to an Azure Queue via Azure Function Output Binding

但我还没有弄清楚如何在 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})
};

但是,消息仍会立即入队/出队。

如何将消息排入队列,使其在 15 分钟内不被处理?

【问题讨论】:

    标签: javascript azure azure-storage-queues


    【解决方案1】:

    我认为以下代码行中存在大小写问题:

    queueClient.sendMessage(base64data, {visibilitytimeout: 60})
    

    visibilitytimeout 应该是visibilityTimeout

    你可以试试下面的代码吗:

    queueClient.sendMessage(base64data, {visibilityTimeout: 60})
    

    更多详情请查看MessagesEnqueueOptionalParamshttps://github.com/Azure/azure-sdk-for-js/blob/ee728d567b6a2aa73c83fcd68fc1557a6fb3072c/sdk/storage/storage-queue/src/generated/src/models/index.ts

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多