IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 消息队列专题(进阶篇):RabbitMQ 介绍与环境搭建 -> 正文阅读

[Java知识库]消息队列专题(进阶篇):RabbitMQ 介绍与环境搭建

之前写过一篇博客简单介绍了消息队列的基础知识,当时立下了 Flag,说好下次会专门介绍 RabbitMQ,说到做到,前来填坑。

消息队列入门基础篇博客链接如下:
https://blog.csdn.net/j1231230/article/details/119180550


什么是 RabbitMQ

RabbitMQ 是实现了高级消息队列协议(AMQP)的面向消息的中间件。RabbitMQ 服务器使用 Erlang 语言编写,是一种应用程序之间的通信方法,在分布式系统开发中应用非常广泛。

上面提到了高级消息队列协议(AMQP),它的介绍如下:

AMQP 是一个具有现代特征的二进制协议,也是一个提供统一消息服务的应用层标准高层消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

AMQP 和 JMS

MQ 作为消息通信的模型,目前有两种主流实现方式:AMQPJMS

两者间的区别和联系:

  • JMS 是通过定义统一的接口来对消息进行统一操作;AMQP是通过规定协议来统一数据交互的格式;

  • JMS 限定了必须使用 Java 语言;AMQP 只是协议,不规定实现方式,因此是跨语言的;

  • JMS 规定了两种消息模型;而 AMQP 的消息模型更加丰富;

通过比较可以发现,AMQP 的统一数据交互格式更加优雅,支持跨语言,同时还支持更丰富的消息模型,所以 RabbitMQ 采用 AMQP 的实现方式也是很合理的。


RabbitMQ 的优势(为什么选择 RabbitMQ)

发展前景角度:

  • 有商业化的运营,不会轻易死掉;
  • 遵循 AMQP 协议,不会被绑架;
  • 强大的社区支持,为技术进步提供动力;
  • 大量成功的应用案例,例如阿里、网易等互联网巨头都有使用;

技术角度:

  • Erlang 开发,是 AMQP 的最佳搭档,在支持持久化的消息队列中性能相对优秀;
  • 支持消息持久化、消息确认机制、灵活的任务分发机制等,功能丰富;
  • 可靠性高;
  • 集群扩展容易,并且可以通过增加节点实现成倍的性能提升;

RabbitMQ 的工作原理

RabbitMQ 的基本结构如下所示:
在这里插入图片描述
组成部分介绍:

Broker:消息队列的服务进程,包括两个部分:Exchange 和 Queue;
Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列;
Queue:消息队列,用来存储消息;
Producer:消息生产者,即生产方客户端,负责发送消息;
Consumer:消息消费者,即消费方客户端,负责接收 MQ 转发的消息;

其中,比较重要的组成部分是 Exchange,它主要分为 4 个类型,下图中列出了常用的 3 个:
在这里插入图片描述
直接(Direct):直接交换机通过消息上的路由键直接对消息进行分发。
扇出(Fanout):一个扇出交换机会将消息发送到所有和它进行绑定的队列上。
主题(Topic):这个交换机会将路由键和绑定上的模式进行通配符匹配。
消息头(Headers):消息头交换机使用消息头的属性进行消息路由,这一种类型官方 demo 没有过多解释。

还有两个重要的概念需要我们了解:

Binding:绑定,是队列和交换机的一个关联连接;
Routing Key:路由键,交换机通过路由键来决定分发消息到哪个队列,可以看作是消息的目的地址;

协同工作流程:
在这里插入图片描述

  1. 消息生产者 Producer 连接 RabbitMQ 的 Broker,创建 connection,开启 channel 通道;
  2. 生产者 Consumer 通过通道声明 Exchange 交换机的类型、名称等;
  3. 生产者 Consumer 发送消息,并指定消息是否持久化等属性和 Routing Key;
  4. Exchange 交换机收到消息后,根据 Routing Key 路由到和当前交换机绑定的匹配队列里;
  5. 消费者监听接收到消息后,发送 ACK 进行消息确认,进行业务处理;

RabbitMQ 的环境搭建

1.查看 RabbitMQ 对应的 Erlang 安装包版本并下载

RabbitMQ 依赖于 Erlang 环境,所以需要先安装 Erlang,要注意二者之间的版本依赖,先选择需要的 RabbitMQ 版本,再去下载 RabbitMQ 依赖的对应版本的 Erlang。

RabbitMQ 下载链接:

https://github.com/rabbitmq/rabbitmq-server/releases

比如选择 RabbitMQ 3.8.4 的话,可以下载 Erlang 22.3 版本,如下图所示。在这里插入图片描述

2.下载与配置指定版本的 Erlang

我们这里需要下载 Erlang 22.3 版本,链接如下:
https://www.erlang.org/downloads

从官方网站下载是常规流程,但是真正实践的时候发现下载速度超级慢,建议从网上直接找资源下载,以下是我找到的 Erlang 下载路径:

otp_src_22.3.tar.gz
网盘链接:https://pan.baidu.com/s/1Q74OmyTujDSp-7QYpl1Ajg
提取码 :2460

将下载好的 Erlang ,上传到 Linux 服务器上,建议上传到 /usr/local 路径下。
在这里插入图片描述
安装步骤如下:

# 解压 erlang 文件
tar -zxvf otp_src_22.3.tar.gz

# 安装 erlang 依赖工具
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel 

# 在当前文件 /usr/local 下,新建 erlang 文件夹
mkdir erlang

# 进入到 otp_src_22.3 里
cd otp_src_22.3

# 执行安装环境, 注意 --prefix=是你需要安装在那个文件夹里,一定是自己创建的空文件夹
./configure --prefix=/usr/local/erlang --without-javac

# 执行完后预安装,安装到上面配置的 --prefix=文件夹内
make && make install

# 测试是否安装成功
./bin/erl

输入后,出现如下内容:
在这里插入图片描述我们可以执行命令,查看是否有效:

io:format("hello world~n", []).

显示如下结果,表示 erlang 安装成功:
在这里插入图片描述
配置环境变量:

vim /etc/profile

配置内容:

export ERLANG=/usr/local/erlang
export PATH=$PATH:${ERLANG}/bin

刷新配置并验证:

# 刷新环境配置
source /etc/profile

# 直接输入 erl
[root@hua otp_src_24.0]# erl

若是可以进入以下效果,表示环境变量配置成功:
在这里插入图片描述

3.下载与配置 RabbitMQ 3.8.4

如果是 Linux 操作系统,就选择这个版本进行下载:
在这里插入图片描述
将下载好的 RabbitMQ 3.8.4 上传到 Linux 服务器上,建议上传到 /usr/local 路径下。
在这里插入图片描述
安装步骤:

# 解压安装 xz
xz -d rabbitmq-server-generic-unix-3.8.4.tar.xz

# 解压安装 tar
tar -xvf rabbitmq-server-generic-unix-3.8.4.tar

# 重命名 rabbitmq
mv rabbitmq_server-3.8.4/ rabbitmq

# 配置环境变量
vim /etc/profile

添加如下配置内容:

export RABBITMQ=/usr/local/rabbitmq
export PATH=$PATH:${RABBITMQ}/sbin

刷新配置:

source /etc/profile

执行初始化命令:

# 安装页面管理插件
rabbitmq-plugins enable rabbitmq_management

# 开启服务,后台运行
rabbitmq-server -detached

# 注:添加用户和权限都要先开启 RabbitMQ 服务
# 页面管理,用户 guest 是不能使用的,手动创建一个用户,并赋予权限
rabbitmqctl add_user admin admin

# 添加权限 .* 表示最高权限/所有权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

# 添加用户名角色,这里添加为 administrator (系统管理员)
rabbitmqctl set_user_tags admin administrator

# 以上修改必须重启
rabbitmq-server restart

如果重启失败,可以手动把之前的进程 kill 掉再启动:
在这里插入图片描述
查找占用端口对应的 pid,直接 kill 掉就可以:
在这里插入图片描述

4.测试访问

需要在自己的服务器上把对应的防火墙端口放开,否则是无法访问的,在浏览器上输入以下地址进行访问:

http://你的服务器ip地址:15672/

出现登录界面后,输入刚刚我们设置的用户名和密码:
在这里插入图片描述
界面显示如下,配置完成!
在这里插入图片描述
下一篇博客将进入消息队列专题的实战篇,会介绍 SpringBoot 与 RabbitMQ 的整合,新的 Flag 又立下了,待实现。


参考资料如下,非常感谢:
https://www.cnblogs.com/wyt007/p/9073154.html
https://blog.csdn.net/kavito/article/details/91403659
https://blog.csdn.net/yehongzhi1994/article/details/107593283
https://www.cnblogs.com/chenkeer/p/15239743.html

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 08:43:52  更:2021-11-26 08:45:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:44:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码