【问题标题】:Azure Queue Trigger giving null queue item incorrectlyAzure 队列触发器错误地给出空队列项
【发布时间】:2017-03-14 16:44:54
【问题描述】:

我正在尝试在 Azure 中编写一个系统,其中一部分我希望能够将大量代码写入队列,并让单个处理代码处理每个项目在队列中。

项目正在正确添加到队列中。我已经检查过了;我有带有 Azure 插件的 Visual Studio。然后,我可以使用 Cloud Explorer 调出存储帐户并查看队列。在这里,队列内容似乎是正确的,因为消息文本预览看起来与我预期的一样。

但是,当我添加一个带有队列触发器的 Azure Functions 来处理这个问题时,当触发器触发时,队列项是空的。我已经尝试了教程代码,减少了一点。当我将运行功能设置为:

public static void Run(string myQueueItem,
    DateTimeOffset expirationTime,
    DateTimeOffset insertionTime,
    DateTimeOffset nextVisibleTime,
    string queueTrigger,        
    TraceWriter log)
{
    log.Info($"C# Queue trigger function processed:     '{myQueueItem.GetType()}'\n" +
        $"queueTrigger={queueTrigger}\n" +
        $"expirationTime={expirationTime}\n" +
        $"insertionTime={insertionTime}\n" +
        $"nextVisibleTime={nextVisibleTime}\n");
}

然后,当我知道它不是时,我会得到队列项目为空的输出。队列触发器元素也是空的。这是一些示例输出,当我直接在 Azure Functions 中运行该函数时:

016-11-01T13:47:41.834 C# Queue trigger function processed: 
queueTrigger=
expirationTime=12/31/9999 11:59:59 PM +00:00
insertionTime=11/1/2016 1:47:41 PM +00:00

这完全触发并且具有合理的插入时间这一事实表明我正在连接到正确的队列。

当队列窥视工具可以看到完整的预览字符串时,有谁知道为什么字符串 myQueueItem 为空?

【问题讨论】:

    标签: c# azure azure-storage azure-functions azure-storage-queues


    【解决方案1】:

    我现在已经开始工作了。我做了两件事。

    首先我清除了“毒药”队列。我之前一直试图反序列化队列中的一些对象。

    然后,我启用了队列 - 它之前被禁用了。在我看来,当您手动运行禁用的队列触发器时,它会提供一些虚假信息,并且不会从队列中获取任何内容 - 它甚至不会将消息出列,这就是提示。

    从现在开始,当我添加队列时,它们会得到正确处理。

    【讨论】:

    • 很高兴听到这对您有用!澄清一下,当您说“手动运行禁用队列时”是什么意思?您是否使用了 Azure Functions 门户中的“运行”选项?
    • 是的,我在 Azure 门户中使用了运行选项,但该功能被禁用。我曾期望这会将队列中的下一个项目从队列中取出,并将其发送出去,但不会自动触发。我没想到这样做会将空数据发送到处理程序,因为这样做的主要目的是进行开发测试,并且您无法真正测试函数的空输入。
    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多