1、消息中间件概况
消息队列(Message Queue,简称MQ)是企业级互联网架构的核心产品。消息队列技术同时也是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行–它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。
在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的。
设计分布式应用的方法主要有:
- 远程过程调用(PRC)-分布式计算环境(DCE)的基础标准成分之一;
- 对象事务监控(OTM)-基于CORBA的面向对象工业标准与事务处理(TP)监控技术的组合;
- 消息队列(MessageQueue)-构造分布式应用的松耦合方法。
这里我们主要分析消息队列 (Message Queue)。
消息队列为构造以同步或异步方式实现的分布式应用提供了松耦合方法。消息队列的API调用被嵌入到新的或现存的应用中,通过消息发送到内存或基于磁盘的队列或从它读出而提供信息交换。消息队列可用在应用中以执行多种功能,比如要求服务、交换信息或异步处理等。
对于消息中间件来说主要就是实现解耦和异步处理操作。
2、常见的消息中间件
消息中间件常见的几类消息产品(Kafka、ActiveMQ、RabbitMQ、RocketMQ):
- RocketMQ是阿里开源的分布式消息中间件,是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点,现在也加入了Apache开源项目下。
- RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多应用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
- ActiveMQ也是Apache出品的,非常流行的消息中间件。ActiveMq也是Java编写的,相对于RabbitMQ要差一些,当整套系统如是Java开发的话,彼此配合的默契更佳。
- Kafka是一种高吞吐量的分布式发布订阅消息系统,属于LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。作为一个消息系统,提供了基本功能,如解耦,顺序性,异步性等。同时优质的设计理念支撑高吞吐,提供O(1)时间负责度持久化能力,数据级别达到TB/PB以上,支持离线与实时处理,即与Hadoop,Storm对接,支持水平scale out。
图片中的比较数据来自阿里的文档分析,通过上面的比较我们可以大致了解基本的性能。
二、RabbitMQ的特点及安装
1、RabbitMQ的特点
可靠性
RabbitMQ提供了多种技术可以让你在性能和可靠性之间进行权衡。这些技术包括持久性机制、投递确认、发布者证实和高可用性机制。灵活的路由
消息在到达队列前是通过交换机进行路由的。RabbitMQ为典型的路由逻辑提供了多种内置交换机类型。如果你有更复杂的路由需求,可以将这些交换机组合起来使用,你甚至可以实现自己的交换机类型,并且当做RabbitMQ的插件来使用。集群
在相同局域网中的多个RabbitMQ服务器可以聚合在一起,作为一个独立的逻辑代理来使用。联合
对于服务器来说,它比集群需要更多的松散和非可靠链接。为此RabbitMQ提供了联合模型。高可用的队列
在同一个集群里,队列可以被镜像到多个机器中,以确保当其中某些硬件出现故障后,你的消息仍然安全。多协议
RabbitMQ 支持多种消息协议的消息传递。广泛的客户端
只要是你能想到的编程语言几乎都有与其相适配的RabbitMQ客户端。可视化管理工具
RabbitMQ附带了一个易于使用的可视化管理工具,它可以帮助你监控消息代理的每一个环节。追踪
如果你的消息系统有异常行为,RabbitMQ还提供了追踪的支持,让你能够发现问题所在。插件系统
RabbitMQ附带了各种各样的插件来对自己进行扩展。你甚至也可以写自己的插件来使用。商业支持
可以提供商业支持,包括培训和咨询。大型社区
围绕着RabbitMQ有一个大型的社区,那儿有着各种各样的客户端、插件、指南等等。
2、RabbitMQ的安装
这里主要介绍一下linux和windows下RabbitMQ的安装。
(1)、Linux下RabbitMQ安装
本文的Linux系统为Ubuntu 5.4.0-6ubuntu1~16.04.4,所以当使用apt进行安装新版本的RabbitMQ时,除了Erlang / OTP之外的所有依赖项在新版的系统中都自带有。
Erlang支持包
如果你使用的是Ubuntu 14.04及之前的版本话,可能需要安装一下新的Erlang的包,如果是较高版本的系统则可以忽略该步骤。Erlang的包链接地址。
可以通过apt-get进行安装,也可以用Erlang包下载来安装。
更新安装Erlang包
sudo apt-get update
sudo apt-get install erlang
- 1
- 2
RabbitMQ安装
在linux下有两种方式可以进行安装:
A、使用APT命令进行安装
在Ubuntu下添加安装源:
echo "deb https://dl.bintray.com/rabbitmq/debian xenial main" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list
- 1
这里的xenial为Ubuntu16.04的发行版本名称,如果为Ubuntu17.10 则更改为artful。同理trusty则为Ubuntu 14.04。
添加公共的钥匙到可信密钥列表中:
wget -O- https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc | sudo apt-key add -
- 1
更新软件,
sudo apt-get update
- 1
安装RabbitMQ服务,
sudo apt-get install rabbitmq-server
- 1
安装 RabbitMQWeb管理插件,然后重启RabbitMQ服务。
rabbitmq-plugins enable rabbitmq_management
service rabbitmq-server restart
- 1
- 2
按理来说现在我们的RabbitMQ服务就已经安装好了,但是当我们进入RabbitMQ服务安装目录/usr/lib/rabbitmq/bin 下,使用rabbitmqctl查看状态时,会出现错误。
这里的rabbitmqctl 是用于添加用户和查看信息等,rabbitmq-plugins用于添加插件。
sudo ./rabbitmqctl status
- 1
如图:
原因是当我们安装时候就提示了这个问题:
这是因为要与启动的rabbitmq服务中使用的HOME一致,因为当前登录的用户不一致,所以会出现这个问题。我们只需要添加HOME目录指到 /var/lib/rabbitmq 即可。编辑rabbitmqctl添加HOME目录。
如下图:
然后rabbitmqctl就可以查看使用了,
我们其实也可以通过使用下面的命令来查看状态:
invoke-rc.d rabbitmq-server status
- 1
还有启动、停止命令
invoke-rc.d rabbitmq-server start
- 1
invoke-rc.d rabbitmq-server stop
- 1
注意:
rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问。
如果想使用guest/guest通过远程机器访问,需要在rabbitmq配置文件中(/etc/rabbitmq/rabbitmq.config)中设置loopback_users为[],如果没有该文件就新建一个写入信息保存。
/etc/rabbitmq/rabbitmq.config文件完整内容如下(注意后面的半角句号):
[{rabbit, [{loopback_users, []}]}].
- 1
然后再重启服务。
当然也可以自己添加用户,比如添加admin/admin123用户
sudo ./rabbitmqctl add_user admin admin123
- 1
然后赋予该用户所有权限:
sudo ./rabbitmqctl set_user_tags admin administrator
sudo ./rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
- 1
- 2
最后我们访问具体的ip:15672,就可以进入RabbitMQ服务的管理界面。
B、使用下载包进行安装
使用这种方式安装,我们首先要去下载rabbitmq包,这里有rabbitmq的释放包,rabbitmq地址包
比如这里我选择rabbitmq-server-generic-unix-3.6.15.tar.xz这个包。
在/opt目录下面新建一个rabbitmq文件夹,获取安装包
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-generic-unix-3.6.15.tar.xz
- 1
进行解压,由于下载的文件是tar.xz文件格式的,所以使用下面的解压命令,
tar xvJf rabbitmq-server-generic-unix-3.6.15.tar.xz
- 1
进入解压目录下,
cd rabbitmq_server-3.6.15
- 1
最后执行
sbin/rabbitmq-server –detached
- 1
通过ps -ef | grep rabbitmq我们可以查看到rabbitmq启动了,如图:
其他的配置就和上面的相同,这里不再复述。
(2)、Windows下RabbitMQ安装
同理也是先安装Erlang,下载Erlang安装包。下载地址。
windows下安装完成之后创建一个名为ERLANG_HOME的环境变量,其值指向erlang的安装目录,同时将%ERLANG_HOME%\bin加入到Path中,最后打开命令行,输入erl,如果出现erlang的版本信息就表示erlang语言环境安装成功;
然后下载windows安装包,下载地址。
安装RabbitMQ服务,最好不要安装到C盘默认目录,该目录默认有空格,在其他盘新建目录安装rabbitmq服务。
安装RabbitMQ-Plugins,通过命令进入RabbitMQ安装目录下的sbin目录,输入rabbitmq-plugins enable rabbitmq_management即可安装好插件。
然后再重启rabbitmq服务,可以在开始菜单先暂停服务,再重启服务。也可以用管理员权限打开cmd,输入下面的命令:
net stop RabbitMQ && net start RabbitMQ
- 1
安装好服务后,进入浏览器输入http://localhost:15672,输入guest/guest进行登录测试。
由于windows下安装比较简单,这里就不再叙述,详情可以参考RabbitMQ的官方文档,参考文档。
本文到这里就完了,全篇文章主要对MQ的基本概念和RabbitMQ的基本知识作了简介,后续的文章会再对RabbitMQ的基本知识再做分析。~~~–_–