MQ引言
什么是MQ
MQ:
message Queue
翻译为消息队列
,通过典型的生产者和消费者模型不断向消息队列中生产消息,消费者不断从队列中获取消息。因为消息的生产和消费都是一部的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松的实现了 系统之间的解耦。别名是消息中间件,通过利用高效的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
MQ有哪些种类
当今市场上有很多主流的消息中间件,如ActiveMQ
、RabbitMQ
,比较火的Kafka
,阿里巴巴开发的RocketMQ
等。
MQ 之间的对比
ActiveMQ
ActiveMQ是Apache触屏的,能力枪金的开源消息总线,它是一个完全支持JMS规范的消息中间件,丰富的API,多种集群架构模式让ActiveMQ在业界成为老牌的MQ。
Kafka
Kafka是LinkedIn开源的分布式消息订阅系统,目前归属Apache顶级开源项目Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的摸底就是 用于日志的收集和传输,适合于大数据的互联网的数据收集业务。
RocketMQ
RocketMQ是阿里巴巴开源的消息中间件,他是存Java开发,具有高吞吐量,高可用,适合大规模分布式系统应用的特点,RocketMQ思路起源于Kafka,但并不是Kafka的复制,他对消息的可靠村塾以及事务做了优化,目前在阿里集团被广泛使用。
RabbitMQ
RabbitMQ是使用Erlang语言开发的开源消息队列的系统,基于AMQP的主要特征是面向消息。队列,路由。可靠性。安全。AMQP协议更多用在企业系统内对数据的一致性、稳定性和可靠性要求很高的场景,对性能吞吐量的要求还在其次。
AMQP协议
AMQP协议(adviance queuing protocol)在2003年提出的,最早用于解决金融领域不同平台之间的消息传递问题,顾名思义AMQP是一种协议,更准确的说是一种链路协议,它补充API层进行限定,而是直接定义网络交换的数据格式。这使得实现了AMQP的provider天然性就是跨平台的,一下是AMQP协议类型
官网: https://www.rabbitmq.com/
官方教程: https://www.rabbitmq.com/#getstarted
在Centos7下安装RabbitMQ
因为RabbitMQ是由Erlang语言开发的所以需要安装Erlang的开发环境,再安装RabbitMQ
1、首先下载所需要的安装包
https://wws.lanzous.com/b01hipv8b
密码:4eqm
2、通过Xftp连接到Centos
3、上传安装包到Centos
4、安装Erlang、RabbitMQ
rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm
yum install -y rabbitmq-server-3.7.18-1.el7.noarch.rpm
默认安装完成后配置文件模板在:
/usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example
要复制一份到自己设置的路径下,这里是事先创建好的 /usr/local/rabbitmq
cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example /usr/local/rabbitmq/
cd /usr/local/rabbitmq
mv rabbitmq.config.example rabbitmq.config
5、修改配置文件
vim rabbitmq.config
然后保存退出
6、启动rabbitmq插件管理
rabbitmq-plugins enable rabbitmq_management
7、启动RabbitMQ
systemctl start rabbitmq-server # 启动rabbitmq服务
systemctl restart rabbitmq-server # 重启服务
systemctl stop rabbitmq-server # 停止服务
8、是否启动成功
systemctl status rabbitmq-server
9、访问web管理界面
输入你的 ip:15672
进入如下界面
用户名是:guest
密码也是:guest
然后就进入了首页
最后聊一下中间遇到的问题以及是如何解决的?
注意:
Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.
刚开始启动的时候出现了这个错误,当然没启动成功,然后输入
journalctl -xe
查看日志信息如下:
主要看error那句;解决方法,修改/etc/hosts文件加上 host后面的域名,设置对应的ip地址。
然后再启动就没错了,如果日志显示的是
Error: This RabbitMQ version cannot run on Erlang 19.0.4 (erts 8.0.3): minimum required version is 19.3 (erts 8.3)
那就代表是版本问题,表示Erlang和RabbitMQ版本不兼容去换版本吧!