mac下安装rabbitmq和php+rabbitq

时间:2024-01-24 21:22:22

mac下安装rabbitmq和php+rabbitq

一、首先使用brew安装rabbitmq

  brew install rabbitmq

  安装完成,终端会出现如下内容,如图:

  启动RabbitMQ

    前台运行rabbitmq-server

    后台运行brew service start rabbitmq

  以上为安装rabbitmq,接下来我们来演示如何使用rabbitmq

 

二、PHP+RabbitMq

  前文中我们已经介绍了rabbitmq的基本定义和使用场景,接下来我们学习如何简单的使用。
  使用时参照rabbitmq官方文档:https://www.rabbitmq.com/

  1、使用composer安装所需的扩展

    composer require php-amqplib/php-amqplib

  

  2、创建消息生产者(发送者)send.php 和 消费者(接受者)receive.php两个文件

    send.php      生产者生产消息

    receive.php   消费者接收消息

  3、生产者发送消息

    3.1 在send.php文件中引入如下:

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

    3.2 创建服务器链接,我们链接的是本地服务器因此是本地连接localhost    

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

    3.3 接下来我们要创建一个频道,我们想要发送消息必须声明一个队列可供我们发送,然后我们向队列中发送消息

$channel->queue_declare('hello', false, false, false, false);//队列名称hello

$msg = new AMQPMessage('Hello World!');
$channel->basic_publish($msg, '', 'hello');

echo " [x] Sent 'Hello World!'\n";

    3.4 最后我们关闭频道和链接

$channel->close();
$connection->close();

    3.5 通常我们会把发送send.php进行封装后调用(根据业务需求对类进行封装),如何调用附上我写的demo

<?php
/**
 * Created by PhpStorm.
 * User: 漠白
 * Date: 2019-06-23
 * Time: 16:53
 */

require_once 'send.php'; //引入发送类

class demo
{
    /**
     * demo
     * test函数包含众多逻辑,其中b部分负责大量逻辑运算使C端用户不能及时相应。准备把b剥离出来放入队列中,从而做到及时向C端反馈。
     */
    function test()
    {
        //代码功能a部分
        //.....

        //代码功能b部分
        $obj = new BeanStalkSend();//调用生产者
        $obj->SendMessage(100,'test/demo/b/3','second_100');//延时时间、路由、名称

        //代码功能c部分
        //.....

        //代码功能d部分
        //.....
    }

    /**
     * b单独剥离
     * b方法负责大量逻辑运算
     */
    function b($id)
    {
        //逻辑运算
        //.......
    }
}

//实例化调用
$obj = new demo;
$obj->test();

 

  4、消费者接收消息

    注:receive与send基本相同

    4.1 在receive.php文件引入     

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;

    4.2 打开一个链接和通道,并声明要消耗的队列,注意:要与发送的队列名称匹配      

//创建链接
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false);//队列名称hello echo " [*] Waiting for messages. To exit press CTRL+C\n";

    4.3 

$callback = function  ($msg)  {
   //读到消息后的操作
  //.... };
//消耗队列内的消息 $channel-> basic_consume('hello','',false,true,false,false,$ callback);
while(count($channel-> callbacks)){ $channel-> wait(); }

    4.4 关闭频道和链接

$channel->close();
$connection->close();

 

 

 

    

 

 

 

  

  

 

posted on 2019-06-24 16:15 漠白 阅读(...) 评论(...) 编辑 收藏