概述

RabbitMQ是一款消息队列中间件。他提供了几乎覆盖所有语言的SDK与文档,简直强大的不的了。要详细的去了解学习RabbitMQ,我建议还是看官方文档吧。http://www.rabbitmq.com/getst...

消息队列有以下几个基本用途

  • 异步处理
  • 应用解耦
  • 流量削峰
  • 系统架构

消息队列的这几个用途我会在后续的文章以真实案例去表述

生产者

创建RabbitMQ链接

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

与链接一个数据库概念差不多

创建一个队列声明

$channel->queue_declare ('hello');

创建多个队列与创建多个数据库一样,hello则是队列名

创建一条消息到队列

$message = new AMQPMessage('Hello World!');

发布消息到队列

$channel->basic_publish ($message, '', 'hello');

hello 是上面创建的队列声明

关闭链接

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

释放资源

消费者

创建RabbitMQ链接

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

与链接一个数据库概念差不多

创建一个队列声明

$channel->queue_declare ('hello');

创建多个队列与创建多个数据库一样,hello则是队列名

消费

$channel->basic_consume ('hello', '', false, true, false, false, function ($msg) {
echo ' [x] Received ', $msg->body, "\n";
});

通过回调函数处理消息队列

等待

while (count ($channel->callbacks)) {
$channel->wait ();
}

无消息时,挂起保持等待状态

关闭链接

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

释放资源

完整的案例

完整的按钮则是上面所有代码的整理

生产者

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel ();
$channel->queue_declare ('hello'); $message = new AMQPMessage('Hello World!');
$channel->basic_publish ($message, '', 'hello'); $channel->close ();
$connection->close ();

消费者

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel ();
$channel->queue_declare ('hello');
// basic_consume 方法第7个方法可以直接传入函数
$channel->basic_consume ('hello', '', false, true, false, false, function ($msg) {
echo ' [x] Received ', $msg->body, "\n";
});
while (count ($channel->callbacks)) {
$channel->wait ();
}
$channel->close ();
$connection->close ();

执行

php {生产者}.php
php {消费者}.php

其他

RabbitMQ支持多线程处理消息队列,所有你可以开启多个消费者去执行消息队列内的任务。你可以像我这样

如果你感觉RabbitMQ这玩意还需要安装啥的感觉特麻烦,那你可以看下我的Laravel队列如何简单的玩起来。
https://segmentfault.com/a/11...

致谢

感谢你看完我这篇文章,纯手记的一篇文章,官方文档对新手的理解造成很多的误解,所以整理此文档,尽量避免新手“进”坑吧。对文章有什么问题或疑问,欢迎在评论区留言。谢谢

原文地址:https://segmentfault.com/a/1190000015482888

RabbitMQ 初体验的更多相关文章

  1. Python操作RabbitMQ初体验(一)

    由于想用Python实现一套分布式系统,来管理和监控CDN的内容与运行状态,误打误撞认识了RabbitMQ,推荐的人很多,如余锋<我为什么要选择RabbitMQ>等等. 在MQ这个词汇映入 ...

  2. RabbitMQ初体验

    这里官方使用的Pom是4.0.2版本 <dependencies> <dependency> <groupId>com.rabbitmq</groupId&g ...

  3. JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中

    JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...

  4. Spring boot集成Rabbit MQ使用初体验

    Spring boot集成Rabbit MQ使用初体验 1.rabbit mq基本特性 首先介绍一下rabbitMQ的几个特性 Asynchronous Messaging Supports mult ...

  5. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  6. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  7. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  8. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  9. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

随机推荐

  1. linux mysql乱码问题

    mysql,发现都是乱码,一堆问号,如下图: 查看mysql编码 需要修改mysql编码,打开/etc/my.cnf 文件 在下边添加如下行 [client] default_character_se ...

  2. Servlet | 访问不同格式文件(PDF、doc)

    核心代码 //设置响应内容类型为PDF类型 response.setContentType("application/pdf"); request.getRequestDispat ...

  3. swiper 解决动态加载数据滑动失效的问题

    两种解决方法 第一种解决办法: success:function(result){ var resultdata =eval("("+result+")"); ...

  4. 基于http的软件仓库

    这是企业中常用的方法 比如一台服务器准备好了,公司必然要安装一些应用 这时可以用这种方法批量安装应用 运行一条命令,服务器就会自己去连接软件仓库,去下载来安装. [root@webmaster htm ...

  5. 洛谷 P2623 物品选取

    https://www.luogu.org/problemnew/show/P2623 https://www.luogu.org/blog/test-1/solution-p2623 重点就是甲类物 ...

  6. eclipse打开jsp的方式怎么设置成默认

    https://jingyan.baidu.com/article/4ae03de34137be3eff9e6b93.html

  7. 535 Encode and Decode TinyURL 编码和解码精简URL地址

    详见:https://leetcode.com/problems/encode-and-decode-tinyurl/description/ C++: class Solution { public ...

  8. json数据有换行符时提交不成功的坑

    这是在有多行文本框表单提交时遇到的问题.. 整理所有的表达数据,合并到一个json中然后jsonp方式提交给后端时,发现只要有换行符,总是提交失败. 目前的解决办法就是在合并数据的时候把换行\n替换为 ...

  9. JavaScript Allongé 第一呷 :基础函数 (3) 未完

    闭包与域是时候来看下一个带函数的函数是如何工作的: (function (x) { return function (y) { return x } })(1)(2) //=> 1 首先,我们使 ...

  10. P1202 [USACO1.1]黑色星期五Friday the Thirteenth

    题目描述 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+N- ...