今天对 RabbitMQ的cluster做个了结,感觉要学习的东西太多了,日后如果使用到了rabbit时,再来回顾吧。
RabbitMQ的cluster在普通模式下(注意是默认模式),吞吐大概在2w左右,但这种的模式不太实用,只要主节点一旦挂掉,整个集群就无法使用,这里不做过多的讨论。主要讨论它的镜像模式,这种模式需要设置vhost的策略(policy)
今天对 RabbitMQ的cluster做个了结,感觉要学习的东西太多了,日后如果使用到了rabbit时,再来回顾吧。
RabbitMQ的cluster在普通模式下(注意是默认模式),吞吐大概在2w左右,但这种的模式不太实用,只要主节点一旦挂掉,整个集群就无法使用,这里不做过多的讨论。主要讨论它的镜像模式,这种模式需要设置vhost的策略(policy)
在刚开始看RabbitMq权限的时候,分不清楚角色和权限(permission)的区别和用法,今天把我对它们的理解做一个总结。
之前在学习RabbitMQ原理的时候,觉得RabbitMQ的启动、停止命令好坑,还有app_start、app_stop,到底用哪个启动呀?有什么区别和联系吗?本人在学习官方教程的过程中,做了这篇笔记。
RPC(Remote Procedure Call Protocol)远程过程调用协议,简称远程调用。但如果仅仅从这一层意义上来说,RabbitMQ的PRC没有实际的意义,因为远程调用接口服务,我们通过curl会更简单易用一些,而且PHP本身也有RPC调用的相关方法。但我要说的是,RabbitMQ的RPC主要用于消息消费后的回复。在这一点RabbitMQ就显得有意义了。因为我们有的时候,发送消息后,需要知道消费的情况,根据消费的情况做后续的逻辑。
学习完了RabbitMQ的PHP教程之Routing (四),route的核心思想就是告诉我们,queue是可以绑定多少routeKey,同时接收多个routeKey的消息,在文章的末尾,我也总结exchange、routeKey、queue、message之间的对应关系 。在文中有以下几行代码:
关于这一篇的教程,主要是针对Route Key的使用。在第二篇的文章中,我们使用direct类型的exchange实现工作队列。在这个基础之上,我们再进行一个扩展:即一个队列绑定多个route key,这样绑定多个route key的队列就能接收到不同route key的消息。但有一点是固定不变的,就是一个message只能有一个route key.
发布 / 订阅模式可以理解为广播模式:即exchange会将消息转发到所有绑定到这个exchange的队列上。针对这种广播模式,RabbitMQ增加了exchange Type的选项 AMQP_EX_TYPE_FANOUT,这种类型在发送消息,queue bind时,都将忽略route key,也就是说不需要设置 route key。
在上一篇文章中,简单实现了消息的发送与接受(参考:RabbitMQ的PHP教程之入门 (一)),但在实际的应用中,很少会使用,本人也不建议使用,因为这种隐藏式的申明,很容易给人造成困扰。但它展示了RabbitMQ的工作原理。
从网上也看了一些关于RabbitMQ的翻译版的教程,觉得有点啰嗦了。所以基于官方
http://www.rabbitmq.com/tutorials/tutorial-one-php.html做一个简单的备注说明,同时也是本人对学习RabbitMQ的一个总结。本人是从事PHP开发的,所以教程中的代码,都是使用PHP来实现,同时丢弃官网使用composer中的AMQPLIB,因为这个AMQPLIB对一些方法进行了封装,不只直观,所以本人使用原生的类、方法进行备注说明,这样更易于理解过程。
AMQP 的消息模型如下图所示:
通过此图我们可以知道, 一个消息的发送流程有如下几个步骤:
/**
* Passing in this constant as a flag will forcefully disable all other flags.
* Use this if you want to temporarily disable the amqp.auto_ack ini setting.
* 传递这个参数作为标志将完全禁用其他标志,如果你想临时禁用amqp.auto_ack设置起效
*/
AMPQ协议为了能够满足各种消息队列需求,在概念上比较复杂。首先,rabbitMQ启动默认是没有任何配置的,需要客户端连接上去,设置交换机等才能工作。不把这些基础概念弄清楚,后面程序设计就容易产生问题。
一定要注意php安装AMQP的版本,版本不同使用的方法不一样。在官方网站就有2个版本的AMQP
第一版本:xxx,详细的url找不到了
第二版本:http://docs.php.net/manual/da/book.amqp.php
千万不要出现这种情况,找到一个官方的版本,然后按照example,怎么调试都不通….按照PHP安装 AMQP扩展 安装的AMQP扩展是最新的,现在和PHP官方给出的第二版本,也有一些区别。主要体现在exchange和queue中有个declare的方法,分别更改成declarExchange()和declarQueue().
1.1 本文档的目标
此文档定义了一个网络协议-高级消息队列协议(AMQP), 它使一致的客户端程序可以与一致的消息中间件服务器进行通信.
我们面对的是这个领域有经验的技术读者,同时还提供了足够的规范和指南.技术工程师可以根据这些文档,在任何硬件平台上使用各种编程语言来构建遵从该协议的解决方案。
AMQP扩展能够支持rabbitMQ,AMQP是rabbitMQ的协议(Advanced Message Queue Protocol 高级消息队列协议)这个可自行百度。
RabbitMQ的配置包括两个配置文件,其中rabbitmq-env.conf仅包括一些常规的设置,例如各种路径。而rabbitmq,则包括很多系统运行参数的配置,这里给出本人注解版的配置。
可以从官方的github上下载rabbitmq的配置实例。
下载地址:https://github.com/rabbitmq/rabbitmq-server/blob/stable/docs/rabbitmq.config.example
原文地址:http://blog.csdn.net/zilong_zilong/article/details/53820660
从文章中可以看到,5个shell脚本中的rabbitmqctl、rabbitmq-server、rabbitmq-plugins都include了rabbitmq-env脚本,而rabbitmq-env脚本include了rabbitmq-defaults。rabbitmq-defaults的默认设置,而且rabbitmq-env是rabbmitmq的真正配置shell(并非配置文件)。结合该文章,注释了rabbit 3.6.6的5个文件。