ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**TTL,Time to Live 的简称,即过期时间。** 目前有两种方法可以设置消息的TTL。 1.通过Queue属性设置,队列中所有消息都有相同的过期时间。 ``` $connection = new AMQPStreamConnection('192.168.33.1', 5672, 'zhangcs', 'zhangcs', '/'); $channel = $connection->channel(); // 通过队列属性设置消息过期时间为10s, 然后在管理页面查看10s之后消息是否消失 $arguments = new AMQPTable(); $arguments->set("x-message-ttl", 10000); $queueName = 'test_msg_ttl'; $channel->queue_declare($queueName, false, true, false, false, false, $arguments); $message = new AMQPMessage('Hello RabbitMQ'); $channel->basic_publish($message, '', $queueName); $channel->close(); $connection->close(); ``` 2.对消息自身进行单独设置,每条消息的TTL 可以不同。 ``` $connection = new AMQPStreamConnection('192.168.33.1', 5672, 'zhangcs', 'zhangcs', '/'); $channel = $connection->channel(); $queueName = 'test_msg_ttl1'; $channel->queue_declare($queueName, false, true, false, false); // 通过消息属性设置消息过期时间为10s, 然后在管理页面查看10s之后消息是否消失 $message = new AMQPMessage('Hello RabbitMQ', ['expiration' => 10000]); $channel->basic_publish($message, '', $queueName); $channel->close(); $connection->close(); ``` **如果两种方法一起使用,则消息的TTL 以两者之间较小数值为准。** 通常来讲,消息在队列中的生存时间一旦超过设置的TTL 值时,就会变成“死信”(Dead Message),消费者默认就无法再收到该消息。当然,“死信”也是可以被取出来消费