php使用RabbitMQ教程

一、首先安装好RabbitMQ

在这里插入图片描述

二、添加PHP amqp扩展,不然无法使用

三、直接上代码

生产者:

<?php

class Producer
{
    private $config = [
        'host' => 'localhost',//换成自己的地址
        'port' => '5672',
        'vhost' => '/',
        'login' => 'admin',
        'password' => 'admin'
    ];
    private $exchangeName;//要和消费者的一致
    private $routKey;//要和消费者的一致

    public function __construct($exchangeName, $routKey = null)
    {
        $this->exchangeName = $exchangeName;
        $this->routKey = $routKey;
    }

    public function send()
    {
        //模拟数据
        $message = json_encode(['id' => mt_rand()]);

        $connection = new \AMQPConnection($this->config);
        try {

            if(!$connection->connect()){
                throw new \Exception('连接失败');
            }
            //创建Channel
            $channel = new \AMQPChannel($connection);

            //设置交换机
            $exchange = new \AMQPExchange($channel);
            $exchange->setName($this->exchangeName);
            //设置类型
            $exchange->setType(\AMQP_EX_TYPE_DIRECT);
            //交换器持久化
//            $exchange->setFlags(\AMQP_DURABLE);
            $exchange->declareExchange();

            //publish发送消息
            //delivery_mode=>2  消息持久化,可以和队列持久化一起保证消息不丢失
            if($exchange->publish($message, $this->routKey, \AMQP_NOPARAM,['delivery_mode' => 2])){
                echo '发送成功';
            }else{
                throw new \Exception('发送失败:'.$message);
            }
        } catch (\Exception $e) {
            echo $e->getMessage();
        }
        $connection->disconnect();// 断开连接
    }

}

(new Producer('hua','test'))->send();

消费者

<?php

class Customer
{
    private $config = [
        'host' => 'localhost',//换成自己的地址
        'port' => '5672',
        'vhost' => '/',
        'login' => 'admin',
        'password' => 'admin'
    ];
    private $exchangeName;
    private $routKey;
    private $queueName;

    public function __construct($queueName,$exchangeName,$routKey = null)
    {
        $this->exchangeName=$exchangeName;
        $this->routKey=$routKey;
        $this->queueName=$queueName;
    }


    public function start()
    {
        $conn = new \AMQPConnection($this->config);
        try {
            if (!$conn->connect()) {
                throw new \Exception('未连接');
            }
            $channel = new \AMQPChannel($conn);
            //设置每次只能处理一条
            $channel->qos(0,1);

            //创建队列
            $q = new \AMQPQueue($channel);
            $q->setName($this->queueName);
            $q->setFlags(\AMQP_DURABLE);
            $q->declareQueue();
            //将给定的队列绑定到交换机上
            $q->bind($this->exchangeName,$this->routKey);
            while(True){
                //消费
                $q->consume(function($envelope, $queue) {
                    $msg = $envelope->getBody();
                    sleep(2);
                    echo $msg . PHP_EOL;
                    $queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答
                });
            }

        }catch (\Exception $e){
            echo $e->getMessage();
            $conn->disconnect();
        }

    }

}

(new Customer('huahua','hua','test'))->start();

效果展示

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以按照以下步骤学习 RabbitMQ使用教程: 1. 首先,您需要安装 RabbitMQ。可以按照引用中的课程提供的教程来进行环境搭建。如果您使用的是命令行方式管理 RabbitMQ,可以按照引用中的命令启用 RabbitMQ 的管理插件。 2. 学习 RabbitMQ 的基本概念和术语。了解消息队列、生产者、消费者、交换机和队列等概念的含义,以及它们在 RabbitMQ 中的作用和关系。 3. 学习如何发送和接收消息。了解如何使用 RabbitMQ 的 API 或者其他支持库,通过生产者发送消息到交换机,然后消费者从队列中接收消息。 4. 学习消息的确认机制。了解如何确保消息的可靠性传输,以及如何处理发送失败或者消费失败的情况。 5. 如果您使用的是 Spring Boot,可以学习如何集成 RabbitMQ。了解如何配置 RabbitMQ 连接工厂,创建消息监听器容器,以及如何在应用程序中发送和接收消息。 6. 探索更高级的功能。学习如何使用 RabbitMQ 的主题交换机、路由交换机等高级功能来实现更灵活的消息路由。 您可以根据您的实际需求选择适合您的学习资源。引用中提供了附带资料的视频教程,可以帮助您更好地理解和学习 RabbitMQ。希望这些信息对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [RabbitMQ使用教程](https://blog.csdn.net/weixin_45486926/article/details/127170831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [硬核,RabbitMQ入门使用教程,详细到哭](https://blog.csdn.net/Javanewspaper/article/details/122251486)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值