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

使用Ballerina RabbitMQ客户端设置RabbitMQ队列的TTL与过期时间

在Ballerina RabbitMQ客户端设置TTL的两种实现方式

1. 队列级TTL(队列自动过期删除)

当队列在指定时间内无任何操作(无消费者、无消息入队/出队),RabbitMQ会自动删除该队列。在Ballerina中声明队列时,通过arguments参数指定x-expires(单位:毫秒)完成配置。

示例代码:

import ballerina/rabbitmq;

public function main() returns error? {
    rabbitmq:Client rabbitmqClient = check new rabbitmq:Client(rabbitmq:DEFAULT_HOST);

    // 声明60秒未使用则自动删除的队列
    rabbitmq:QueueConfiguration queueConfig = {
        arguments: {
            "x-expires": 60000
        }
    };
    check rabbitmqClient->declareQueue("expiring-queue", queueConfig);

    // 后续业务操作:发送/消费消息等
    check rabbitmqClient->close();
}

2. 消息级TTL(队列中消息自动过期)

队列中的未消费消息会在指定时间后被自动丢弃,支持两种配置方式:

2.1 队列默认消息TTL(所有消息统一过期)

声明队列时通过arguments设置x-message-ttl(单位:毫秒),队列内所有未被消费的消息都会遵循该过期时间。

示例代码:

import ballerina/rabbitmq;

public function main() returns error? {
    rabbitmq:Client rabbitmqClient = check new rabbitmq:Client(rabbitmq:DEFAULT_HOST);

    // 声明队列,设置所有消息默认10秒后过期
    rabbitmq:QueueConfiguration queueConfig = {
        arguments: {
            "x-message-ttl": 10000
        }
    };
    check rabbitmqClient->declareQueue("message-ttl-queue", queueConfig);

    // 发送消息,自动继承队列的TTL配置
    check rabbitmqClient->publishMessage({content: "Hello, RabbitMQ with TTL".toBytes()}, queue = "message-ttl-queue");

    check rabbitmqClient->close();
}

2.2 单个消息自定义TTL(针对特定消息设置过期时间)

发送消息时,通过rabbitmq:MessageProperties的expiration字段(字符串形式的毫秒数)为单个消息设置独立TTL,优先级高于队列默认TTL。

示例代码:

import ballerina/rabbitmq;

public function main() returns error? {
    rabbitmq:Client rabbitmqClient = check new rabbitmq:Client(rabbitmq:DEFAULT_HOST);

    // 声明普通队列(也可同时设置默认TTL)
    check rabbitmqClient->declareQueue("per-message-ttl-queue");

    // 发送一条5秒后过期的消息
    rabbitmq:MessageProperties props = {
        expiration: "5000"
    };
    check rabbitmqClient->publishMessage(
        {content: "Message with 5s TTL".toBytes(), properties: props}, 
        queue = "per-message-ttl-queue"
    );

    // 发送一条15秒后过期的消息
    props.expiration = "15000";
    check rabbitmqClient->publishMessage(
        {content: "Message with 15s TTL".toBytes(), properties: props}, 
        queue = "per-message-ttl-queue"
    );

    check rabbitmqClient->close();
}

注意事项

  • x-expires和x-message-ttl需传入非负整数,0表示立即过期(队列立即删除/消息立即丢弃)。
  • 单个消息的expiration字段必须是字符串类型的数字,不能直接传入整数。
  • 消息过期后不会被立即删除,会在RabbitMQ内部清理任务触发时移除,或当消费者尝试消费该消息时被检测并丢弃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:37:18