一、消息中间件
1. 何为消息中间件
消息队列中间件:Message Queue Middleware,简称MQ,是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
消息队列中间件一般有两种传递模式:点对点(P2P,Point-to-Point)模式和发布/订阅(Pub/Sub)模式。
(1)点对点模式:基于队列,消息生产者发送消息到队列,消息消费者从队列中接收消息。
(2)发布/订阅模式:消息发布者将消息发布到某个主题,而消息订阅者则从主题中订阅消息。发布/订阅模式在消息的一对多广播时采用。(主题相当于消息传递的中介)
消息中间件适用于需要可靠的数据传送的分布式环境。
如上图,消息中间件负责处理网络通信,如果网络连接不可用,消息中间件会存储消息,直到连接变得可用,再将消息转发给应用程序B。
目前比较主流的开源消息中间件主要有:RabbitMQ、Kafka、ActiveMQ、RocketMQ等。
2. 消息中间件有何用处
消息中间件在分布式系统中的作用主要有:解耦、冗余(存储)、扩展性、削峰、可恢复性、顺序保证、缓冲、异步通信,等等,在不同的应用场景下展现的作用不同。
二、AMQP
AMQP:Advanced Message Queuing Protocol,高级消息队列协议。AMQP 是应用层协议的一个开放标准,用于解决众多消息中间件的需求和拓扑结构问题。它为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。
1. 分层
AMQP 协议包括三层:
(1)Module Layer:位于协议最高层,主要定义了一些供客户端调用的命令,客户端可以利用这些命令实现自己的业务逻辑。
(2)Session Layer:位于中间层,主要负责将客户端的命令发送给服务器,再将服务端的应答返回给客户端,主要为客户端与服务器之间的通信提供可靠性同步机制和错误处理。
(3)Transport Layer:位于最底层,主要传输二进制数据流,提供帧的处理、信道复用、错误检测和数据表示等。
从 low-level 举例来说,AMQP 本身是应用层的协议,其填充于 TCP 协议层的数据部分。而从 high-level 来说,AMQP 是通过协议命令进行交互的。AMQP 协议可以看作一系列结构化命令的集合,这里的命令代表一种操作,类似于 HTTP 中的方法(GET、POST、PUT、DELETE 等)。
2. 流转过程
(1)生产者流转过程
(2)消费者流转过程
三、RabbitMQ 1. 简介 RabbitMQ 是采用 Erlang 语言实现 AMQP 的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。 2. 特点 (1)可靠性:持久化、传输确认、发布确认... (2)灵活的路由: 在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ 已经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。 (3)扩展性:多个 RabbitMQ 节点可以组成一个集群。动态扩展集群。 (4)高可用性:队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队列仍然可用。 (5)多种协议:RabbitMQ 除了原生支持 AMQP 协议,还支持 STOMP、MQTT 等多种消息中间件协议。 (6)多种语言客户端 (7)管理界面 (8)插件机制:RabbitMQ 提供了许多插件,以实现从多方面进行扩展,当然也可以编写自己的插件。 3. 模型架构 RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收、存储和转发消息。从计算机术语层面来说,RabbitMQ 模型更像是一种交换机模型。 RabbitMQ 的整体模型架构大概如下:
![](/i/l/?n=22&i=blog/747151/202208/747151-20220831224652648-537433588.jpg)
![](/i/l/?n=22&i=blog/747151/202208/747151-20220831224752007-217207436.jpg)
![](/i/l/?n=22&i=blog/747151/202208/747151-20220831224838394-10340682.jpg)
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel(2)官网下载Erlang:http://www.erlang.org/downloads,这里下载版本:23.2 解压,编译,安装:(这里安装至 /usr/local/erlang)
tar -zxvf otp_src_23.2.tar.gz cd otp_src_23.2 ./configure --prefix=/usr/local/erlang --without-javac make make install(3)修改配置文件/etc/profile,添加环境变量:
ERLANG_HOME=/usr/local/erlang export PATH=$PATH:$ERLANG_HOME/bin export ERLANG_HOME使配置文件生效:
source /etc/profile(4)验证 Erlang 是否安装成功:
![](/i/l/?n=22&i=blog/747151/202208/747151-20220831225117483-1129559016.png)
xz -d rabbitmq-server-generic-unix-3.9.3.tar.xz tar -xvf rabbitmq-server-generic-unix-3.9.3.tar(2)修改配置文件:
export PATH=$PATH:/usr/local/rabbitmq_server-3.9.3/sbin export RABBITMQ_HOME=/usr/local/rabbitmq_server-3.9.3使配置文件生效:
source /etc/profile3. 运行 RabbitMQ (1)运行 RabbitMQ:
rabbitmq-server
rabbitmqctl status
rabbitmqctl cluster_status
rabbitmqctl add_user root为root用户设置所有权限:
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"为root用户设置管理员角色:
rabbitmqctl set_user_tags root administratorRabbitMQ 默认用户:guest,只能用于本地访问。 (3)开放端口:
firewall-cmd --zone=public --add-port=5672/tcp --permanent重启防火墙:
firewall-cmd --reload查看是否开放成功:
firewall-cmd --zone=public --query-port=5672/tcpRabbitMQ 默认运行端口:5672。 4. 访问 RabbitMQ 管理后台 (1)开启管理后台插件
rabbitmq-plugins enable rabbitmq_management
firewall-cmd --zone=public --add-port=15672/tcp --permanent重启防火墙:
firewall-cmd --reload查看是否开放成功:
firewall-cmd --zone=public --query-port=15672/tcp(3)创建管理后台用户
rabbitmqctl add_user admin admin1234 rabbitmqctl set_user_tags admin administrator(4)浏览器访问管理后台 http://{ip}:15672
![](/i/l/?n=22&i=blog/747151/202208/747151-20220831225835749-641851297.png)
安装参考: https://blog.csdn.net/junxieshiguan/article/details/84547918 https://www.cnblogs.com/ylsforever/p/6600925.html
部分图片来自《RabbitMQ 实战指南》
标签:交换器,入门,队列,简介,RabbitMQ,--,消息,路由 From: https://www.cnblogs.com/wujuntian/p/16644894.html