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

如何在Java客户端捕获Azure Service Bus消息落地时间

捕获Azure Service Bus主题消息的落地时间

方案1:生产者端添加自定义时间属性

如果需要由生产者控制时间戳,在发送消息时给消息添加自定义属性即可:

  • 生产者代码示例:
ServiceBusMessage message = new ServiceBusMessage("你的消息内容");
// 添加自定义属性,记录发送时的时间
message.getApplicationProperties().put("SenderEnqueueTime", Instant.now());
serviceBusSender.send(message);
  • 监听器读取属性:
@ServiceBusListener(queueName = "你的订阅队列名")
public void handleMessage(ServiceBusReceivedMessage message) {
    Instant enqueueTime = (Instant) message.getApplicationProperties().get("SenderEnqueueTime");
    // 后续处理逻辑
}

这种方式简单直接,但依赖生产者的时钟同步,若生产者时钟不准,时间会存在偏差。

方案2:利用Service Bus内置的服务端落地时间

Azure Service Bus本身会记录消息到达服务端的准确时间,Java SDK可直接获取:

  • 监听器代码示例(基于新版azure-messaging-servicebus SDK):
@ServiceBusListener(queueName = "你的订阅队列名")
public void handleMessage(ServiceBusReceivedMessage message) {
    // 获取服务端记录的UTC落地时间,返回OffsetDateTime类型
    OffsetDateTime enqueuedTime = message.getEnqueuedTime();
    // 转换为Instant或所需时区格式
    Instant enqueuedInstant = enqueuedTime.toInstant();
}

如果使用旧版azure-servicebus SDK,对应的方法是getEnqueuedTimeUtc(),返回Instant类型。

该属性由Service Bus服务端生成,无需生产者额外处理,是最准确的消息落地时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:47:48