深入理解RabbitMQ消息中间件

一、引语

本文将介绍RabbitMQ消息中间件的基本概念、工作原理以及在实际应用中的使用场景。通过阅读本文,您将了解到RabbitMQ如何帮助企业实现高效的异步通信和解耦。

二、消息中间件

1.简介

信息中间件是一种应用于分布式系统的基础软件,它位于各类应用/服务与操作系统/数据库系统以及其他系统软件之间,主要解决分布式环境下数据传输、数据访问、事务处理、安全认证等问题。 中间件可以理解为面向信息系统交互,集成过程中的通用部分的集合,屏蔽了底层的通讯,交互,连接等复杂又通用化的功能,以产品的形式提供出来,系统在交互时,直接采用中间件进行连接和交互。

2.主要作用

  • 冗余(存储)--有些情况下处理数据的过程会失败,造成数据丢失,可使用消息中间件进行数据持久化
  • 扩展性
  • 解耦
  • 异步通信
  • 削峰:消息队列中的常用场景,比如线上的双十一秒杀,或者春节火车票抢购,会有大量的请求同时进来。这时服务承受的压力是平时的几十甚至上百倍,一般会因为流量过大,应用系统配置承载不了这股瞬间流量,容易造成数据库的崩溃或者导致系统直接挂掉,即传说中的“宕机”现象。为解决这个问题,加入了消息中间件后我们会将那股巨大的力量将其统一转移至MQ中均速处理消息。而不直接涌入我们的后端服务接口,这样可以防止流量洪峰造成系统服务崩溃.

3.消息中间件的两种模式

  • P2P模式(点对点模式)包含三个角色:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每个消息都被发送到一个特定的队列,消息可以在队列中进行异步传输,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。队列支持多个消费者,但是一个消息只能被一个消费者消费。
  • Pub/Sub模式(发布订阅模式)包含三个角色:主题(Topic)、发布者(Publisher)、订阅者(Subscriber) 。发布者将消息发送到Topic,多个订阅者从 Topic 订阅消息。一个消息可以被多个订阅者消费。

4.思考

消费者怎么从消息队列里边得到数据?有两种办法:1.生产者将数据放到消息队列中,消息队列有数据了,主动叫消费者去拿(俗称push)
2.消费者不断去轮训消息队列,看看有没有新的数据,如果有就消费(俗称pull)

三、Rabbitmq集群

1.Rabbitmq的简介

RabbiMQ是⽤erlang语言开发的,开源的,集群⾮常⽅便,支持多种语言客户端,包括java、Python、ruby、PHP、C/C++等,但其本身并不⽀持负载均衡,支持高并发。支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、高可用性等方面表现不俗。

2.特点

  • 可靠性---提供了多种技术可以在性能和可靠性之间进行权衡。这些技术包括 持久性机制、投递确认、和高可用性机制
  • 高可用性
  • 多语言客户端
  • 管理界面
  • 插件机制

3.思考

如何实现持久化?
1 队列实现持久化
如果要队列实现持久化,需要在声明队列的时候把 durable 参数设置为持久化 。
boolean durable = true;
channel.queueDeclare(ACK_QUEUE_NAME, durable, false, false, null);
但是需要注意的就是如果之前声明的队列不是持久化的,需要把原先队列先删除,或者重新 创建一个持久化的队列,不然就会出现错误。
当我们将durable参数位置传递true之后,即使重启 rabbitmq 队列也依然存在。2 消息实现持久化
要想让消息实现持久化需要在消息生产者修改代码,需要像channel的basicPublish方法中props属性中传递MessageProperties.PERSISTENT_TEXT_PLAIN 参数

4.实验过程

注意:集群中有两种节点,分别为内存节点和镜像节点

1 内存节点:只保存状态到内存(持久的queue的持久内容将被保存到disk)2 磁盘节点:保存状态到内存和磁盘。---推荐内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存状态 就足够了
如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失。

我们进行普通集群的部署

准备环境

准备三台干净的服务器,并关闭防火墙和selinux,在完成准备这些以后,我们还要对服务器进行改名和映射处理。
192.168.91.5     rabbitmq-1
192.168.91.6     rabbitmq-2
192.168.91.7     rabbitmq-3

分别在三个节点上安装rabbitmq软件

yum install -y *epel* gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel            #安装依赖curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
yum install erlang-21.3.8.21-1.el7.x86_64            #yum安装erlangyum install -y rabbitmq-server-3.7.10-1.el7.noarch.rpm      #安装rabbitmq

安装完成之后我们可用依次启动rabbitmq

systemctl daemon-reload
systemctl start rabbitmq-server
systemctl enable rabbitmq-serverrabbitmq-plugins enable rabbitmq_management       #开启web访问页面

开启用户远程登录

cp /usr/share/doc/rabbitmq-server-3.7.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config    # vim /etc/rabbitmq/rabbitmq.config
除去第61行的注释即可

完成以上操作我们再重启服务就可以通过浏览器进行访问了

systemctl restart rabbitmq-server

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/266838.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 40 组合总和 II

题意理解: 每个数字在每个组合中只能使用 一次 数字可以重复——>难点(如何去重) 每个组合和target 求组合,对合限制,考虑回溯的方法。——将其抽象为树结构。 树的宽度——分支大小 树的深度——最…

.NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)

WebAppDbTest 项目准备 项目准备1、.net cli 创建项目2、nuget 包引用和项目结构2.1、项目添加相关 nuget 包2.2、WebAppDbTest 项目结构 3、项目代码说明3.1、CSharp/C# 类文件说明3.2、json 配置文件说明 4、项目运行预览 数据库 .db 文件准备1、创建 SQLite 数据库1.1、在 W…

vue前端访问Django channels WebSocket失败

现象 前端报错:SSH.vue:51 WebSocket connection to ‘ws://127.0.0.1:8000/server/terminal/120.59.88.26/22/1/’ failed: 后端报错:Not Found: /server/terminal/120.79.83.26/22/1/ 原因 django的版本与channels的版本不匹配(django…

IDEA多模块开发-加载模块管理-加快项目加载速度

加快项目加载速度 当一个项目模块数量多起来之后,若所有的模块都同时使用git,maven管控,那么每次Idea打开项目/git切换分支加载时间将会极久 配置git模块 file-setting- Version-Control 管理git控制模块, 对于当前不需要git管…

【Maven教程】(十二):版本管理 ——版本号定义约定及相关概念,自动化版本发布与创建分支,GPG签名 ~

Maven 版本管理 1️⃣ 版本管理的概念2️⃣ Maven 的版本号定义约定3️⃣ 主干、标签与分支4️⃣ 自动化版本发布5️⃣ 自动化创建分支6️⃣ GPG签名6.1 GPG 及其基本使用6.2 Maven GPG Plugin 🌾 总结 一个健康的项目通常有一个长期、合理的版本演变过程。例如JUn…

分布式之raft一致性算法

1.CAP定理 在一个分布式系统中,CAP三者不可兼得,最多只有两者可以满足,正所谓鱼和熊掌不可兼得 一致性 Consistency:所有的节点在同一时间的数据一致可用性 Availability:服务在正常响应时间内可用分区容错性 Partit…

全新wifi大师独立版4.0.5分销小程序/专业独立版/带流量主+搭建教程

源码简介: 全新wifi大师独立版4.0.5分销小程序,它是专业独立版,而且是带流量主,有搭建教程。 WiFi大师是一款专为商家店内用户设计的WiFi连接小程序。它的出现有效解决了商家在为客户提供WiFi服务的过程中遇到的各种问题&#x…

大数据篇|Hadoop发展史及介绍

文章目录 一、Hadoop介绍1.1、Hadoop是什么 二、Hadoop发展史2.1、创始人2.2、Hadoop发展历史/起源2.3、Hadoop三大发行版本2.3.1、Apache Hadoop2.3.2、Cloudera Hadoop2.3.3、Hortonworks Hadoop 三、Hadoop组成3.1、Hadoop组成3.2、模块3.3、Hadoop特性优点 一、Hadoop介绍 …

ppt编辑密码如何设置?

大家在PPT中设置了限制编辑,发现后面任然可以编辑文件。那么如何将PPT文件设置成禁止修改模式呢?今天分享几个方法给大家。 方法一 将PPT文件直接保存或者另存为一份文件,在保存时,将文件格式选择为PowerPoint图片演示文稿 方法…

关于uniapp X 的最新消息

uni-app x 是什么? uni-app x,是下一代 uni-app,是一个跨平台应用开发引擎。 uni-app x 没有使用js和webview,它基于 uts 语言。在App端,uts在iOS编译为swift、在Android编译为kotlin,完全达到了原生应用的…

【基于LSTM的股票数据预测与分类】

基于LSTM的股票数据预测与分类 引言数据集与爬取数据处理与可视化股票预测与分类Flask页面搭建股票推荐功能创新点结论 引言 股票市场波动剧烈,对于投资者而言,精准的数据预测和分类是制定明智决策的基础。本文将介绍一种基于长短时记忆网络&#xff08…

安装EfficientSAM过程记录

1. 可以从github或者hugging face下载测试程序 2. 最好用Hugging face中app.py进行测试,github中的例程EfficientSAM_example.ipynb的程序有些BUG需要自己调试,需要修改两处错误。 3. 主要以Hugging face进行讲解: 建立虚拟环境ESAM&#…