消息队列中间件系列的最后一篇了,RabbitMQ消息的持久化、确认机制、死信队列、负载均衡等一系列进行说明。
两种方式:一种是自动确认,一种是手动确认
死信队列 DLX(Dead-Letter-Exchange) 也可以成为死信交换机,就是当一个队列中的消息变成死信以后,会被重新发送到另一个交换机,这个交换机就是DLX,而绑定DLX的队列就是死信队列。
死信队列的成因:
消息被拒绝,消费者中使用 (basic.reject/basic.nack),并且 requeue = false , 消息被拒绝接收后就会进入到死信队列中。
# 消费者
$callback = function ($msg) {
// 拒绝接收消息
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};
$channel->basic_qos(null, 1, null);
$channel->basic_consume($queueName,'', false,false,false,false,$callback);
消息过期,可以使用 x-message-ttl 参数设置当前队列中所有消息的过期时间(单位毫秒)。一旦消息过期,就会从队列中删除。
// 在正常队列中设置消息过期时间
$channel->exchange_declare('logs', 'direct',false, false, false);
$args = new AMQPTable([
// 消息过期时间
'x-message-ttl' => 20000,
// 死信交换机
'x-dead-letter-exchange' => 'dead-exc',
// 死信路由键
'x-dead-letter-routing-key' => 'dead-key'
]);
$channel->queue_declare($queue_name, false, true,false,false,false,$args);
$channel->queue_bind($queue_name, 'logs');
队列达到最大长度: x-max-length
设置最大消息数,x-max-length-bytes
设置最大长度(以字节为单位)。如果设置了两个参数,则两者都将适用,将强制执行首先达到的限制。
$args = new AMQPTable([
// 设置最大消息数
'x-max-length' => 2,
'x-dead-letter-exchange' => 'dead-exc',
'x-dead-letter-routing-key' => 'dead-key'
]);
设置死信队列,只需要定义队列的时候设置x-dead-letter-exchange
指定交换机就可以了
延时队列就是当消息发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后消费者才能拿到消息来消费。
RabbitMQ会始终记录以下四种类型的内部元数据:
RabbitMQ集群分为3个模式,主备模式,镜像模式,异地多活模式。
HAproxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡、以及Tcp和Http的应用程序代理。
特别适用于那些负载特大的Web站点,完全可以支持数以万计的并发连接,同时可以保护Web服务器不被暴漏到网络上。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。