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

RabbitMQ流插件x-stream-offset参数支持的正确日期格式是什么?

关于RabbitMQ Stream插件x-stream-offset参数的时间戳传参说明

报错原因

x-stream-offset参数的合法取值有三类,时间戳类的取值必须是AMQP 0.9.1协议定义的timestamp专属类型,不能直接传字符串或普通整数:

  • 预定义字符串:first/last/next,直接传字符串即可生效
  • 消息偏移量:普通整数,代表从第N条消息开始消费
  • 时间戳:必须为AMQP timestamp类型,代表从该时间点之后的第一条消息开始消费

你之前的所有错误写法都不符合类型要求:

  • 传ISO8601、YYYY-MM-DD格式的字符串:属于长文本类型,不在预定义字符串范围内,直接触发参数校验失败
  • 传毫秒级整数:既不属于合法的消息偏移量范围,也不被识别为时间戳类型
  • 直接传Time.now.to_i生成的秒级Unix时间戳整数:会被识别为普通整数类型的消息偏移量,数值远大于当前队列的最大消息序号,所以校验不通过

正确写法(Ruby Bunny客户端)

Bunny客户端提供了Bunny::Timestamp类用于封装AMQP timestamp类型的参数,你只需要把秒级Unix时间戳传入该类封装后再赋值给x-stream-offset即可:

require 'bunny'
require 'json'

# 目标时间解析为Time对象
target_time = Time.parse('2021-08-28T13:40:31-07:00')
# 封装为Bunny::Timestamp类型,传入秒级时间戳
timestamp_offset = Bunny::Timestamp.new(target_time.to_i)

opts = {
  exclusive: false,
  manual_ack: true,
  block: true,
  arguments: {
    'x-stream-offset': timestamp_offset
  }
}

queue.subscribe(opts) do |delivery_info, _properties, payload|
  msg = JSON.parse(payload)
  puts msg

  ch.ack(delivery_info.delivery_tag, false)
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:36:05