rabbitMq 保证消息可靠性

本文介绍了如何确保RabbitMQ中的消息可靠性,重点讨论了消息持久化和发送者确认模式。通过设置交换机、队列和消息为持久化,可保证消息在RabbitMQ崩溃后仍能恢复。同时,启用发送者确认模式,通过ack和nack信号,确保消息成功到达队列并处于稳定状态,从而避免消息丢失。在回调处理中,根据ack和nack回调判断消息是否成功入列,从而采取相应的处理策略。
摘要由CSDN通过智能技术生成

rabbitmq作为我们系统之间沟通的桥梁,消息的可靠性就显得格外重要。
假如rabbitmq crash掉之后重新启动,原本的交换机、队列、消息都会消失,如果我们队列中存在一些很重要的消息的时候,我们并不愿意这样的事情发生,这就需要借助rabbitmq的持久化机制。

rabbitmq的持久化

交换机、队列设置可以为持久化,消息的投递模式也可以选择持久化(三个持久化)。
持久化的消息在进入持久化队列之后会写入到rabbitmq的持久性日志文件中,消息被消费掉后,会把持久性日志文件中该消息标记为等待垃圾收集
在broker重启之后,持久化的交换机、队列会重新初始化,持久化的消息会投递到原先的队列上

怎么做到消息持久化

三个持久化:
交换机持久化、队列持久化、消息持久化

代码示例:

<?php

try{
    $config = [
        "host" => "127.0.0.1",
        "port" => "5672",
        "login" => "wuj13",
        "password" => "Aaa294515505",
        "vhost" => "test_vhost"
    ];
    $conn = new AMQPConnection($config);
    //连接rabbitmq
    if(!$conn->connect()){
       throw new Exception("连接失败");
    }
    //创建信道
   $channel = new AMQPChannel($conn);
    //创建交换机
    $exchange = new AMQPExchange($channel);
    $exchangeName = "exchange_one";
    //设置交换机名称
    $exchange->setName($exchangeName);
    //设置交换机类型
    $exchange->setType(AMQP_EX_TYPE_DIRECT);
    //设置为持久化交换机
    $exchange->setFlags(AMQP_DURABLE);
    //生成交换机
    $exchange->declareExchange();


    //创建队列
    $queueName ="queue_test";
    $queue = new AMQPQueue($channel);
    //设置队列名称
    $queue->setName($queueName);
    $queue->setFlags(AMQP_DURABLE);
    //生成队列
    $queue->declareQueue();
    //队列绑定交换机
    $queue->bind($exchangeName,$queueName);


    $message = "hello world";
    //向交换机发布消息
    $re = $exchange->publish($message,$queueName,AMQP_NOPARAM,["delivery_mode" => 2]);
    if($re){
        echo "成功发送消息".$message.PHP_EOL;
    }
    else{
        throw new Exception("发送消息失败");
    }

}
catch(Exception $excep
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值