You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# Azure Function中获取队列消息的InsertionTime

在C# Azure Function中获取QueueMessage的InsertionTime

嗨,我来帮你搞定这个问题!在C#的Azure Function里,你完全不需要只绑定到消息体字符串——只要把触发器参数的类型换成CloudQueueMessage,就能直接访问所有队列消息的元数据,包括你需要的InsertionTime。

具体步骤:

  1. 确保引用必要的命名空间:
    你需要在代码顶部引入Microsoft.Azure.Storage.Queue命名空间,Visual Studio创建的Azure Function项目通常已经默认引用了相关NuGet包,如果没有的话,安装Microsoft.Azure.WebJobs.Extensions.Storage即可。

  2. 修改函数签名:
    把原来的string myQueueItem替换成CloudQueueMessage myQueueItem,这样就能拿到完整的消息对象了。

完整代码示例:

using Microsoft.Azure.Storage.Queue;
using Microsoft.Extensions.Logging;

public static class QueueTriggerFunction
{
    [FunctionName("QueueTriggerFunction")]
    public static void Run(
        [QueueTrigger("url-content-300", Connection = "AzureWebJobsStorage")] CloudQueueMessage myQueueItem,
        ILogger log)
    {
        // 获取消息插入时间(注意是可空的DateTimeOffset类型)
        if (myQueueItem.InsertionTime.HasValue)
        {
            var insertionTime = myQueueItem.InsertionTime.Value;
            log.LogInformation($"消息插入时间: {insertionTime.ToUniversalTime().ToString("o")}");
        }

        // 获取消息体字符串
        string messageBody = myQueueItem.AsString;
        log.LogInformation($"队列消息体: {messageBody}");

        // 你还可以直接访问其他元数据属性
        log.LogInformation($"消息ID: {myQueueItem.Id}");
        log.LogInformation($"出队次数: {myQueueItem.DequeueCount}");
        if (myQueueItem.ExpirationTime.HasValue)
        {
            log.LogInformation($"消息过期时间: {myQueueItem.ExpirationTime.Value.ToUniversalTime().ToString("o")}");
        }
    }
}

关键说明:

  • CloudQueueMessage的InsertionTime是DateTimeOffset?类型(可空),所以使用前要先检查HasValue属性,避免空引用异常。
  • 不需要像Python那样序列化JSON再提取属性,直接访问对象的属性即可,更加简洁高效。
  • 除了InsertionTime,你还能直接获取Id、DequeueCount、ExpirationTime、NextVisibleTime、PopReceipt等所有队列消息的元数据。

内容的提问来源于stack exchange,提问作者Frank Cannon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:42:56