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,消息队列,保存消息并将它们转发给消费者。
相关推荐
Bro_cat24 分钟前
Java基础
java·开发语言·面试
一起养小猫38 分钟前
《Java数据结构与算法》第三篇(下)队列全解析:从基础概念到高级应用
java·开发语言·数据结构
2501_9411426441 分钟前
人工智能与推荐系统在高并发互联网架构中的优化与工程实践经验分享
rabbitmq
一只会写代码的猫1 小时前
面向企业级分布式系统的Java微服务架构设计与高性能实践深度探索与经验分享
rabbitmq
vx_vxbs661 小时前
【SSM电动车智能充电服务平台】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·spring cloud·小程序·php·idea
叹隙中驹石中火梦中身1 小时前
解耦神器Event和EventListener
java
Boop_wu1 小时前
[Java EE] 多线程进阶(JUC)(2)
java·jvm·算法
小坏讲微服务1 小时前
SpringCloud整合Scala实现MybatisPlus实现业务增删改查
java·spring·spring cloud·scala·mybatis plus
N***p3651 小时前
五大消息模型介绍(RabbitMQ 详细注释版)
java·rabbitmq·java-rabbitmq
m***l1151 小时前
集成RabbitMQ+MQ常用操作
分布式·rabbitmq