一、首先使用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();

总结:

生产者生产过程:
  (1)生产者连接到 RabbitMQ Broker 建立一个连接( Connection) ,开启 个信道 (Channel)
  (2) 生产者声明一个交换器 ,并设置相关属性,比如交换机类型、是否持久化等
  (3)生产者声明 个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等 
  (4)生产者通过路由键将交换器和队列绑定起来。 
  (5)生产者发送消息至 RabbitMQ Broker ,其中包含路由键、交换器等信息。 
  (6) 相应的交换器根据接收到的路由键查找相匹配的队列 如果找到 ,则将从生产者发送过来的消息存入相应的队列中。 
  (7) 如果没有找到 ,则根据生产者配置的属性选择丢弃还是回退给生产者
  (8) 关闭信道。
  (9) 关闭连接。

消费者接收消息的过程: 
  (1)消费者连接到 RabbitMQ Broker ,建立一个连接(Connection ,开启 个信道(Channel)
  (2) 消费者向 RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数, 以及做 些准备工作。
  (3)等待 RabbitMQ Broker 回应并投递相应队列中的消息, 消费者接收消息。
  (4) 消费者确认 ack) 接收到的消息 
  (5) RabbitMQ 从队列中删除相应己经被确认的消息
  (6) 关闭信道。
  (7)关闭连接。

    

  

  

mac下安装rabbitmq和php+rabbitq的更多相关文章

  1. mac下安装rabbitmq

    使用homebrew安装rabbitmq,命令如下: brew install rabbitmq 安装的位置如下/usr/local/Cellar/rabbitmq/3.7.18 进入到sbin目录下 ...

  2. MAC 下安装RabbitMQ

    1.使用brew来安装 RabbitMQ(地址:http://www.rabbitmq.com/install-standalone-mac.html ) 2.安装目录 /usr/local/Cell ...

  3. mac下安装 rabbitMq

    1.安装HomeBrew,如果已经安装这一步跳过. 2.用brew install rabbitmq指令即可进行rabbitmq服务的自动安装. 3.安装完成之后会出现一下提示:   rabbit安装 ...

  4. Mac 下安装Jenkins

    Mac 下安装Jenkins 开始 Jenkins是一个基于Java开发的一种持续集成工具,用于建工持续重复的工作,功能包括: 持续的软件版本发布/测试项目 监控外部调用执行的工作. 近期打算搭建自动 ...

  5. MAC下安装与配置MySQL

    MAC下安装与配置MySQL   MAC下安装与配置MySQL 一 下载MySQL 访问MySQL的官网http://www.mysql.com/downloads/ 然后在页面中会看到“MySQL ...

  6. Mac下安装UPnP Inspector

    由于工作中需要用到UPnP Inspector这个工具,而这个工具在windows下安装非常简单,在Mac下安装却很麻烦,在此记录安装流程. 这个工具依赖于两个其他的库:Coherence(一个DLN ...

  7. Mac下安装Wireshark,双击闪退

     Mac OS X上使用Wireshark抓包(http://blog.csdn.net/phunxm/article/details/38590561) Mac下安装Wireshark /Appli ...

  8. Mac下安装zshell

    Mac 下安装zshell 什么是shell 大多数命令行用户接触最多的是Bash,因为Bash是各个版本操作系统(Linux&Mac)的默认shell. 查看当前使用的shell $ ech ...

  9. 【高可用HA】Apache (1) —— Mac下安装Apache Httpd到自定义路径(非/etc/apache2)

    Mac下安装Apache Httpd httpd版本: httpd-2.4.17 参考来源: Tomcat Clustering - A Step By Step Guide Apache HTTP ...

随机推荐

  1. 基于TCP的客户端和服务器端的代码设计

    实验平台 linux 实验内容 编写TCP服务器和客户端程序,程序运行时服务器等待客户端连接.一旦连接成功,服务器显示客户端的IP地址和端口号,并向客户端发送字符串 实验原理 TCP是面向连接的通信, ...

  2. prufer编码学习笔记

    prufer 编码 对于一个无根树,他的 prufer 编码是这样确定的: 每次找到编号最小的一个叶子节点,也就是度数为\(1\)的节点,把和它相连的点,加入 prufer 编码序列的末尾,然后把这个 ...

  3. 3) drf 框架生命周期 请求模块 渲染模块 解析模块 自定义异常模块 响应模块(以及二次封装)

    一.DRF框架 1.安装 pip3 install djangorestframework 2.drf框架规矩的封装风格 按功能封装,drf下按不同功能不同文件,使用不同功能导入不同文件 from r ...

  4. kafka可插拔增强如何实现?

    导弹拦截,精准防御. 背景 拦截器:在不修改应用程序业务逻辑的情况下,一组基于事件的可插拔的逻辑处理链: 类比springMVC的拦截器: 这些都是通过配置拦截器,插入到应用程序中,实现可插拔的修改业 ...

  5. jacoco 生成单测覆盖率报告

    一.jacoco 简介 jacoco 是一个开源的覆盖率工具,它针对的开发语言是 java.其使用方法很灵活,可以嵌入到 ant.maven 中:可以作为 Eclipse 插件:可以作为 javaAg ...

  6. 05_CSS入门和高级技巧(3)

    上节课复习 !important不能影响就近原则,远的标签如果加上!important也干不过近的标签! !important不能影响继承权重是0,通过继承的标签加上!important也干不过直接选 ...

  7. Go语言入门教程系列——函数、循环与分支

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Golang专题的第四篇,这一篇文章将会介绍golang当中的函数.循环以及选择判断的具体用法. 函数 在之前的文章当中其实我们已经接 ...

  8. 【Scala】scala的继承能干嘛?这段简单的代码或许能帮你梳理

    package cn.itcast.scala.demo2 class Person { //private关键字和final关键字修饰的常量无法被继承重写 val id: Int = 1 var n ...

  9. 【不断更新】mysql经典50道题自我练习

    mysql经典50道题自我练习 测试数据和练习题均转载自CSDN博主@启明星的指引的文章sql语句练习50题(Mysql版),用于mysql的每日自我练习 表名和字段 –1.学生表 Student(s ...

  10. STM32 使用IQmath实现SVPWM

    IQMATH TI的片子很香,做的也很好,但是成本相对ST会更高,电机控制方面,TI无疑是做的最好的方案之一,另外TI针对没有浮点运算器的定点DSP推出了IQMATH库,在使用Q格式对数据进行分析和处 ...