RabbitMQ入门及安装
文章目录
1.介绍
- RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。
- RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
- RabbitMQ有四种工作模式,分别为direct(直连),fanout(分发),headers,topic(匹配)
官方文档: https://www.rabbitmq.com/tutorials/tutorial-one-java
1.AMQP和JMS
目前消息队列的主流实现方式有两种,分别为amqp
和jms
协议
- AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。
- JMS ,即Java消息服务(Java Message Service)应用程序接口,是Java平台上的专业技术规范,一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。JMS是一种与厂商无关的 API,用来访问收发系统消息,它类似于JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商都支持 JMS, JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JMS客户机发送消息。
2.目前主流的消息队列
类型 | ActiveMQ | RabbitMQ | RocketMQ | kafka |
---|---|---|---|---|
单机吞吐量 | 万级 | 万级 | 十万级,支持高吞吐 | 十万级以上 |
时效性 | ms级 | 微秒级 | ms级 | 延迟在ms级内 |
可用性 | 基于主从架构实现高可用 | 高,基于主从架构实现高可用 | 非常高,分布式架构 | 非常高,天然分布式 |
可靠性 | 有较低的概率丢失数据 | 消息不丢失 | 经过参数优化配置,可以做到0丢失 | 经过参数优化配置可以做到0丢失 |
开发语言 | java | Erlang | java | Scala+Java |
核心特点 | MQ领域的功能及其完备 | 基于Erlang开发,所以并发能力强,性能及其好,延时很低 | MQ功能较为完善,还是分布式的,扩展性好 | 功能较为简单,在大数据领域的实时计算以及日志采集被大规模使用 |
2.安装
1.Linux安装
官网erlang版本 : 20.3.8.x
官方rabbitMq版本: rabbitmq-server-generic-unix-3.7.14.tar.xz
1.1 安装erlang
1.安装环境
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
2.在/usr/local/下创建erlangapp文件夹,创建erlang文件夹
mkdir /usr/local/erlangapp
mkdir /usr/local/erlang
2.将erlang安装包上传到该目录
3.解压
tar -zvxf
4.进入erlang解压目录中
5.由于是configure.in,所以需要使用autoconf生成配置
./otp_build autoconf
如果报错autoconf找不到,则需要安装
yum -y install autoconf
6.进入文件,编译安装
./configure
make
make install
7.配置环境变量
##进入环境变量配置文件
vim /etc/profile
##在底部添加环境变量
export ERLANG_HOME=/usr/local/lib/erlang
export PATH=$PATH:$ERLANG_HOME/bin
8.重新加载环境变量
source /etc/profile
9.输入erl查看
erl
halt().##退出
1.2 RabbitMQ安装
1.创建rabbitMQ文件夹,上传
mkdir /usr/local/rabbitmq/
2.解压
xz -d rabbitmq-server-generic-unix-3.7.14.tar.xz
tar -vxf rabbitmq-server-generic-unix-3.7.14.tar
3.配置环境变量
vim /etc/profile
## 向文件添加
export PATH=$PATH:/usr/local/rabbitmq/rabbitmq/sbin
## 重新加载
source /etc/profile
4.启动
rabbitmq-server -detached ##【开启rabbitmq服务】
rabbitmqctl status ## 【查看服务状态】
rabbitmqctl start_app ## 【启动应用】
rabbitmq-plugins enable rabbitmq_management ##【开启web管理插件】
5.添加管理员
rabbitmqctl add_user 用户名 密码
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*" ##配置权限
rabbitmqctl set_user_tags 用户名 administrator ##修改用户角色,将用户设为管理员
rabbitmqctl list_users ##查看所有用户
rabbitmqctl delete_user guest ##删除guest用户
6.启动
#rabbitmq服务默认端口为5672,web管理页面为15672
http://ip:15672
2.Docker安装
拉取镜像
docker pull rabbitmq:3.8.5-management #management的rabbitMQ是有图形界面的
运行容器
docker run --name rabbitmq -p 15672:15672 -p 5672:5672 \
--restart=always \
--hostname my-rabbit \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \
-e RABBITMQ_DEFAULT_USER=root \
-e RABBITMQ_DEFAULT_PASS=root \
-d rabbitmq:3.8.5-management
参数说明
RABBITMQ_DEFAULT_VHOST:虚拟主机
RABBITMQ_DEFAULT_USER:用户名
RABBITMQ_DEFAULT_PASS:密码
hostname:主机名
docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management #不进入容器开启web管理页面
如果配置了RABBITMQ_DEFAULT_VHOST
虚拟主机,springboot集成出现错误
java.net.SocketException: socket closed
则需要检查该虚拟主机是否添加了该用户
如果没有需要的用户则需要点进去添加
3.核心组件
- Server: 又称Broker ,接受客户端的连接,实现AMQP实体服务。 安装rabbitmq-server
- Connection: 连接,应用程序与Broker的网络连接 TCP/IP/ 三次握手和四次挥手
- Channel: 网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可以建立对各Channel,每个Channel代表一个会话任务。
- Message: 消息,服务与应用程序之间传送的数据,由Properties和body组成,Properties可是对消息进行修饰,比如消息的优先级,延迟等高级特性,Body则就是消息体的内容。
- Virtual Host: 虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个虚拟主机理论可以有若干个Exchange和Queue,同一个虚拟主机里面不能有相同名字的Exchange
- Exchange: 交换机,接受消息,根据路由键发送消息到绑定的队列。(不具备消息存储的能力)
- Bindings: Exchange和Queue之间的虚拟连接,binding中可以保护多个routing key.
- Routing key: 是一个路由规则,虚拟机可以用它来确定如何路由一个特定消息。
- Queue: 队列,也称为Message Queue,消息队列,保存消息并将它们转发给消费者。