RabbitMQ研究(一)简介与安装

简介

MQ

MQ是指利用高校可靠的消息传递机制与平台无关的数据交流,并基于数据通信来进行的分布式系统的集成。

主流的MQ最常用的有两种模式:点对点P2P、订阅/发布模式。
点对点主要是基于队列,消息生产者发送到队列里面,消息消费者从队列里面获取,小型项目,可以直接使用内存Queue,或者直接用Redis的List作为队列。发布订阅定义了一个内容节点,这个内容在MQ里面成为Topic(主题),主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息订阅者则从主题中订阅消息,主要应用场景是广播一对多的时候。

主流的开源的MQ:RabbitMQ、Kafka、ActiveMQ、RocketMQ、ZeroMQ(现在用的较少)
以下指标是我根据网上的自己一个一个去找了资料验证补充过后的

特性 ActiveMQ RabbitMQ RocketMQ Kafka
提供者-消费者 支持 支持 支持 支持
订阅-发布 支持 支持 支持 支持
request-replay(请求回应) 支持 支持 不支持 不支持
API和文档完备性 高质量 高质量 高质量 高质量
多语言支持 支持,Java优先 支持多语言 只支持Java 支持,Java优先
单机吞吐量 万级 万级 万级 十万级
消息延迟 微秒级 毫秒级 毫秒级
可用性 高(主从) 高(主从) 非常高(分布式) 非常高(分布式)
消息丢失 理论上不会丢失 理论上不会丢失
社区活跃度
成熟度 成熟 成熟 比较成熟 成熟日志领域
特点 功能齐全 Erlang语言,性能好 各个环节分布式
支持协议 STOMP、REST、XMPP、AMQP AMQP 自己定义的
持久化 内存、文件、数据库 内容、文件 磁盘文件 内存、磁盘
事务 支持 支持 支持
负载均衡 支持 支持 支持
优先级队列 支持 支持 支持(分区顺序) 不支持
延迟队列 支持 支持 支持 不支持
死信队列 支持 支持 支持 不支持
评价 优点:成熟的产品,大规模使用
缺点:会丢失消息,不适用于上千个队列(Queue的数量少)的应用场景
优点:管理界面友好
缺点:不支持动态扩展
优点:接口模型接单,性能非常好,可以大量堆积消息在Broker
缺点:新文档缺乏

作用

异步解耦:各个模块之间异步解耦
冗余(存储):比如A系统调用B系统,如果调用一次,失败了,在代码中不进行二次调用,都不会再次成功。而MQ则可以持久化,除非删掉这个消息
扩展性:因为消息本身已经解耦了,入队和处理效率很高,扩展性也很高,代码修改起来较容易
削峰:访问量巨大的时候,有削峰效果
可恢复性:一部分组件失效,不会影响到整个系统,直接恢复即可

安装

windows

  • 安装erlang语言
    http://www.erlang.org/downloads
    下载,然后安装,之后再配置PATH环境变量到bin目录
    验证erlang语言,进入CMD里面输入erl
    如果出现如下则表示环境安装成功
Eshell V10.2  (abort with ^G)
1>

找到 Windows: Installer (recommended) | Binary build,选择Binary点击即可,解压,下载放到合适的位置,DOS进入到目录下面的sbin,输入rabbitmq-plugins enable rabbitmq_management安装,如果出现如下,表示安装成功

F:\software\rabbitmq-server-windows-3.7.10\rabbitmq_server-3.7.10\sbin>rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node [email protected]:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to [email protected]
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

set 3 plugins.
Offline change; changes will take effect at broker restart.

启动RabbitMQ:打开sbin目录,双击rabbitmq-server.bat,出现如下
RabbitMQ研究(一)简介与安装

访问管理界面,打开浏览器:http://localhost:15672/ 输入用户密码:guest/guest

RabbitMQ研究(一)简介与安装

RabbitMQ研究(一)简介与安装

安装成功

Centos7

  • 安装erlang

检查依赖
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel

下载解压:
wget http://erlang.org/download/otp_src_19.3.tar.gz(当然使用wget,ifconfig命令需要先安装插件yum install wget ,yum install net-tools)

下载完成后解压:tar -xvzf otp_src_19.3.tar.gz

编译安装
./configure --prefix=/usr/local/erlang --enable-smp-support --enable-threads --enable-sctp --enable-kernel-poll --enable-hipe --with-ssl --without-javac

make && make install
配置变量:


vim /etc/profile
export PATH=$PATH:/usr/local/erlang/bin 
source /etc/profile

验证:./bin/erl

  • 安装RabbitMQ
cd /usr/local  //切换到计划安装RabbitMQ的目录,我这里放在/usr/local
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix-3.6.1.tar.xz  //下载RabbitMQ安装包
xz -d rabbitmq-server-generic-unix-3.6.1.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.6.1.tar

解压,配置环境变量,同上erl语言方式

启动

rabbitmq-server -detached //启动rabbitmq,-detached代表后台守护进程方式启动。

查看状态:
rabbitmqctl status

配置网页管理,启动插件
mkdir /etc/rabbitmq
rabbitmq-plugins enable rabbitmq_management

开放管理端口和服务器端口

firewall-cmd --permanent --add-port=15672/tcp
firewall-cmd --permanent --add-port=5672/tcp
systemctl restart firewalld.service

增加用户

rabbitmqctl add_user nick nick  //添加用户,后面两个参数分别是用户名和密码,我这都用nick了。
rabbitmqctl set_permissions -p / nick ".*" ".*" ".*"  //添加权限
rabbitmqctl set_user_tags nick administrator  //修改用户角色

然后就可以远程访问了,然后可直接配置用户权限等信息。
登录:http://ip:15672 登录