001 RabbitMQ入门及安装

RabbitMQ入门及安装

文章目录

1.介绍

  • RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。
  • RabbitMQ 服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
  • RabbitMQ有四种工作模式,分别为direct(直连),fanout(分发),headers,topic(匹配)

官方文档: https://www.rabbitmq.com/tutorials/tutorial-one-java

1.AMQP和JMS

目前消息队列的主流实现方式有两种,分别为amqpjms协议

  • 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.安装环境

shell 复制代码
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel

2.在/usr/local/下创建erlangapp文件夹,创建erlang文件夹

shell 复制代码
mkdir /usr/local/erlangapp
mkdir /usr/local/erlang

2.将erlang安装包上传到该目录

3.解压

shell 复制代码
tar -zvxf 

4.进入erlang解压目录中

5.由于是configure.in,所以需要使用autoconf生成配置

shell 复制代码
./otp_build autoconf 

如果报错autoconf找不到,则需要安装

shell 复制代码
yum -y install autoconf

6.进入文件,编译安装

shell 复制代码
./configure
make  
make install  

7.配置环境变量

shell 复制代码
##进入环境变量配置文件
vim /etc/profile
##在底部添加环境变量
export ERLANG_HOME=/usr/local/lib/erlang  
export PATH=$PATH:$ERLANG_HOME/bin 

8.重新加载环境变量

shell 复制代码
source /etc/profile

9.输入erl查看

shell 复制代码
erl
halt().##退出
1.2 RabbitMQ安装

1.创建rabbitMQ文件夹上传

shell 复制代码
mkdir /usr/local/rabbitmq/

2.解压

shell 复制代码
 xz -d rabbitmq-server-generic-unix-3.7.14.tar.xz 
 tar -vxf rabbitmq-server-generic-unix-3.7.14.tar 

3.配置环境变量

shell 复制代码
 vim /etc/profile
## 向文件添加
 export PATH=$PATH:/usr/local/rabbitmq/rabbitmq/sbin
## 重新加载
 source /etc/profile

4.启动

shell 复制代码
rabbitmq-server -detached   ##【开启rabbitmq服务】
rabbitmqctl status     ## 【查看服务状态】
rabbitmqctl start_app    ## 【启动应用】
rabbitmq-plugins enable rabbitmq_management    ##【开启web管理插件】

5.添加管理员

shell 复制代码
rabbitmqctl add_user 用户名 密码
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"   ##配置权限
rabbitmqctl set_user_tags 用户名 administrator   ##修改用户角色,将用户设为管理员
rabbitmqctl list_users    ##查看所有用户
rabbitmqctl delete_user guest    ##删除guest用户

6.启动

shell 复制代码
#rabbitmq服务默认端口为5672,web管理页面为15672
http://ip:15672

2.Docker安装

拉取镜像

shell 复制代码
docker pull rabbitmq:3.8.5-management  #management的rabbitMQ是有图形界面的

运行容器

shell 复制代码
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

参数说明

shell 复制代码
RABBITMQ_DEFAULT_VHOST:虚拟主机
RABBITMQ_DEFAULT_USER:用户名
RABBITMQ_DEFAULT_PASS:密码
hostname:主机名
shell 复制代码
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,消息队列,保存消息并将它们转发给消费者。
相关推荐
清山博客8 分钟前
Java将PDF保存为图片
java·开发语言·pdf
life102415 分钟前
pdf文档动态插入文字水印,45度角,旋转倾斜,位于文档中央,多行水印可插入中文
java·pdf·水印
归鸿铭16 分钟前
Html 转pdf
java·pdf·html
lix的小鱼29 分钟前
Scala之Array数组
java·开发语言·后端·python·scala
计算机徐师兄37 分钟前
Java基于SSM框架的校园综合服务小程序【附源码、文档】
java·微信小程序·小程序·校园综合服务小程序·java校园综合服务小程序·校园综合服务微信小程序
柔弱女子爱java44 分钟前
XML文件(超详细):XML文件概念、作用、写法、如何用程序解析XML、写入XML、dom4j框架、DTD文档、schema文档
xml·java·开发语言·后端
wsd_ontheroad1 小时前
HTML 转 PDF
java·pdf·html
xmh-sxh-13141 小时前
redis使用介绍
java
chusheng18401 小时前
Java 基于SpringBoot+Vue的家政服务管理平台
java·vue.js·spring boot·家政服务·家政服务平台
调皮的木木1 小时前
Mysql的加锁情况详解
java·数据库·mysql