mac php rabbitmq,mac下安装rabbitmq和php+rabbitq

一、首先使用brew安装rabbitmq

brew install rabbitmq

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

fd67ad3d789fae415dbb69f9cdae4c9a.png

启动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

008ef457775fd592281e69c0ba28e085.png

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

* Created by PhpStorm.

* User: 漠白

* Date: 2019-06-23

* Time: 16:53*/

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

classdemo

{/**

* demo

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

functiontest()

{//代码功能a部分

//.....

//代码功能b部分

$obj = new BeanStalkSend();//调用生产者

$obj->SendMessage(100,'test/demo/b/3','second_100');//延时时间、路由、名称

//代码功能c部分

//.....

//代码功能d部分

//.....

}/**

* b单独剥离

* b方法负责大量逻辑运算*/

function b($id)

{//逻辑运算

//.......

}

}//实例化调用

$obj = newdemo;$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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值