消息中间件 - RocketMQ基础

news2024/10/7 14:32:06

  • 一个进程内能够创建的线程数量是有限的。 
所有中间件的目的:
  1. 性能效率上的一个提升
  2. 代理:帮你去完成一些额外的事情

MQ介绍

MQ概述

  • MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器多用于分布式系统之间进行通信。
  • 在计算机领域,消息指的就是数据(跟业务整合的)!
  • 消息队列是应用程序和应用程序之间的通信方法,主要应用在多个工程之间,相互的传递消息,消息由生产者发送到MQ进行排队,然后按原来的顺序由消费者从MQ当中来拉取消息进行处理。
  • 队列:数据结构的一种,特征为"先进先出" - FIFO,意思是有序的。

为什么使用MQ?

  • 在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高系统的吞吐量。 

Tomcat的并发量大约是500个请求左右/s!(500个请求就意味着有500个线程) 

MQ的优势和劣势

优势:

  1. 应用解耦
  2. 异步提速
  3. 削峰填谷

劣势:

  1. 系统的可用性降低
  2. 系统复杂度提高
  3. 一致性问题 

1. 应用解耦:消费者存活与否不影响生产方

应用解耦意思就是消费者无论挂掉没有,都不影响生产者在这里发消息,MQ就相当于是一个中介,生产者通过MQ与消费者进行交互!

应用解耦 / 使用MQ使得应用间解耦  可以提高系统的容错性和可维护性!

  • 一个程序和另一个程序它们的耦合度要降低!(高内聚,低耦合)
  • 系统的耦合度越高,容错性就越低,可维护性就越低!

2. 异步提速:生产方发完消息,可以继续进行下一步的业务逻辑  

同步:一个一个来/走,你走完了我才能走 ⇒ 一个动作做完以后才能进行下一个动作。

异步:各来/走各的 ⇒ 两个动作可以同时做。

  • 将不需要同步处理并且耗时长的操作由消息队列来通知消息接收方进行异步处理,从而提高应用程序的响应时间,提升系统的吞吐量。
  • 异步调用能够提高系统的响应速度以及吞吐量。

3. 削峰填谷

  • TPS:每秒事务数 
  • 削峰填谷指的是通过消息队列平滑、缓和的处理高峰期突发产生的高并发流量,从而减少对后端服务的冲击,避免因突发流量而导致应用崩溃或系统瘫痪。
  • 这种技术的实现方式是将突发的请求放入到消息队列当中,这样一来,高峰期产生的数据就会被积压在MQ当中,高峰就被"削"掉了,然后通过异步或定时任务的方式,从消息队列当中取出消息,并以匀速的方式发送到后端服务中,直到消费完积压的消息,这就叫做"填谷",这样就可以平滑的处理高并发流量,在避免请求过多、并发过高的同时,保障了后端服务的正常工作。
  • 削峰填谷技术在一些高并发的场景下被广泛应用,比如秒杀、抢购等大规模的并发场景。
  • 削峰填谷后,可以提高系统的稳定性。
     

MQ的劣势

1. 系统的可用性降低(降低系统的可用性)

  • 因为你在系统当中引入了一个MQ这样的组件,你只要引入组件的话,这个组件万一坏了,我们整个系统不就全崩掉了,所以说只要是引入了新的一些组件,那么必然会造成系统的可用性降低!
  • 系统引入的外部依赖越多,系统稳定性越差,一旦MQ宕机,就会对业务造成影响。

如何保证MQ的高可用?

2. 系统复杂度提高

  • MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。 

如何保证消息没有被重复消费?如何处理消息丢失情况?如何保证消息传递的顺序性呢?

3. 一致性问题 

  • A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,B、C、D都要处理完才算事务的一致,如果B系统、C系统处理成功,D系统处理失败,那么整个事务的处理也算是失败的!

所以如何保证消息数据处理的一致性呢? 

MQ产品介绍

1. ActiveMQ
  • 纯Java语言实现,并发量较低,万级数据吞吐量,处理速度比较慢,处理速度达到毫秒ms级,成熟度高
2. RabbitMQ
  • 底层由erlang语言实现,erlang语言比较底层,直接和物理硬件进行交互,因此处理速度会非常快,处理速度是微秒us级别的,
3. RocketMQ
  • Java语言实现,高吞吐,万亿级吞吐保证,处理速度毫秒级别,分布式架构,功能强大,扩展性强
4. Kafka
  • scala语言实现,scala是运行在我们的Java虚拟机上的一门语言,吞吐量高,处理速度也比较快,处理速度达到毫秒级,但是功能比较单一,应用于日志分析、大数据采集较多,所以在大数据的技术当中,用Kafka是最多的。

RocketMQ概述

  • RocketMQ是阿里开源的一款非常优秀的中间件产品,脱胎于阿里的另一款队列技术MetaQ,后捐赠给Apache基金会作为一款孵化技术仅仅经历了一年多的时候就成为了Apache基金会的顶级项目,它现在已经在阿里内部被广泛的应用,并且经受住了多次双十一的这种极致场景的压力!(2017年的双十一,RocketMQ流转的消息量达到了万亿级,峰值TPS达到了5600万) 

RocketMQ解决了MQ的所有缺点~!

RocketMQ的工作原理

  • 生产者集群来进行发消息 
  • Broker:部署着RocketMQ的机器就叫一台Broker。
  • 生产者发消息到RocketMQ当中,然后RocketMQ还能返回一个接收结果。
  • 消息的消费者就会从RocketMQ当中来拉取消息。

我们的消息达到了RocketMQ之后,我们的消费者它怎么就知道消息队列当中就有了消息了呢?

有两种模式:

1. 拉取模式(拉取消费):消费者这里可以起一个线程之类的,每隔一秒钟问一下RocketMQ,队列当中有消息吗?

  • 拉取模式很不好,很占用我们消费者的资源,因为每秒钟它都要发一次请求去拉取数据。

2. 监听器模式或推送模式(推送消费 - 常用):我们的消费者和RocketMQ建立一个长连接,建立好了长连接之后,一旦RocketMQ当中有了消息并且有某一个消费者监听着某一个队列,那么RocketMQ就会把这个消息推送给消息的消费者,这就是一个推送模式或者叫我们的消费者起一个监听器。

这就是最基础的消息的发送与接收!

它就是专门来存储一些元数据。

JMS:就是消息领域的JDBC

 

RocketMQ安装启动

消息发送

消息类别

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直接插入排序(图解+c语言代码实现)

直接插入排序(一种稳定的排序方法) 算法思想:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止; 下面为代码实现(每一次将需…

对称二叉数[简单]

优质博文:IT-BLOG-CN 一、题目 给你一个二叉树的根节点root, 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出&#xff…

商越科技:渗透测试保障平台安全,推动线上采购高效运转

商越科技是数字化采购解决方案提供商,在同赛道企业中始终保持前列。商越科技通过自主研发的智能采购中台、SaaS应用及运营服务等为企业搭建专属的互联网采购平台,帮助企业实现采购数字化以及智能化转型,提高工作效率、降低采购成本。 打造数字…

基于单片机设计的智能风扇(红外线无线控制开关调速定时)

一、项目介绍 在炎热的夏季,风扇成为人们室内生活中必不可少的电器产品。然而,传统的风扇控制方式存在一些不便之处,比如需要手动操作开关、无法远程控制和调速,以及缺乏定时功能等。为了解决这些问题,设计了一款基于…

数据库数据恢复—无备份,未开启binlog的MySQL误删除怎么恢复数据

数据库数据恢复环境: 一台本地windows sever操作系统服务器,服务器上部署mysql数据库单实例,引擎类型为innodb,表内数据存储所使用表空间类型为独立表空间。无数据库备份,未开启binlog。 数据库故障&分析&#xf…

flink1.18.0 自适应调度器 资源弹性缩放 flink帮你决定并行度

jobmanager.scheduler Elastic Scaling | Apache Flink 配置文件修改并重启flink后,webui上会显示调整并行度的按钮,他可以自己调整,你也可以通过webUI手动调整: 点击 之后: 调整完成后:

uniapp实现在线PDF文件预览

下载pdf文件放在static文件夹下 bug&#xff1a;hbuildX创建的项目pdf文件夹可以放在根目录下面&#xff0c;但是cli创建的项目无法预览&#xff0c;只能放在static下面 按钮跳转预览页面 <button click"toPdf">pdf</button>methods: {toPdf() {uni.…

50代码审计-PHP无框架项目SQL注入挖掘

代码设计分为有框架和无框架 挖掘技巧&#xff1a;随机挖掘&#xff0c;定点挖掘&#xff0c;批量挖掘&#xff08;用工具帮助扫描探针&#xff0c;推荐工具&#xff1a;fortify&#xff0c;seay系统&#xff09;。 1.教学计划&#xff1a; ---审计项目漏洞 Demo->审计思…

【Git】推送Github失败:remote: Permission to xxx/*.git denied to xxx

在github上&#xff0c;创建了token&#xff0c;推送代码报没权限 #设置token git remote set-url origin <your.token>github.com/<your.name>/hello-git.git#推送代码 #git push -u origin main remote: Permission to xxx/hello-git.git denied to xxx. fatal:…

xlua游戏热更新(C#访问lua)

xlua作为Unity资源热更新的重要解决方案api&#xff0c;在Tecent重多游戏中被采用&#xff0c;本文通过案例去讲解xlua代码结构层次。 /** Tencent is pleased to support the open source community by making xLua available.* Copyright (C) 2016 THL A29 Limited, a Tence…

WPF中数据绑定验证深入讲解

WPF中数据绑定验证深入讲解 WPF在用户输入时&#xff0c;提供了验证功能&#xff0c;通常验证使用以下两种方式来实现&#xff1a; 在数据对象中引发错误。通常是在属性设置过程中抛出异常&#xff0c;或者在数据类中实现INotifyDataErrorInfo或IDataErrorInfo接口。在绑定级…

【docker容器 redis密码没有生效解决办法】

遇到的问题&#xff1a;启动docker版本redis认证失败&#xff0c;导致web端启动失败 报错内容如下 redis.exceptions.ResponseError: AUTH called without any password configured for the default user. Are you sure your configuration is correct? 做的一系列操作&…

野火霸天虎 STM32F407 学习笔记_4 构建库函数尝试;使用固件库点亮 LED 灯

构建库函数 创建一个通用的模板&#xff0c;后面写程序直接使用这个模板。 $ ls Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2023/11/8 23:27 Libraries d----- …

Django文件配置、request对象、连接MySQL、ORM

文章目录 Django静态文件及相关配置静态文件前言静态文件相关配置 form表单request对象request请求结果GET请求POST请求 pycharm连接数据库Django连接MySQLDjango ORM简介 Django静态文件及相关配置 在此篇博客我将以一个用户登录页面来引入相关知识 首先我们先编写一个html页面…

【计算机网络笔记】网络层服务模型——数据报网络

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

不可忽视的国外服务器地址IP选择指南

​  在如今互联网高速发展的时代&#xff0c;海外服务器扮演着重要的角色。选择合适的国外服务器IP地址却是一项复杂而又关键的任务。本文将为您介绍一些不可忽视的国外服务器地址IP选择指南。 私有IP地址&#xff1a; 私有IP地址是指在局域网内使用的IP地址&#xff0c;用于…

vue Sts认证后直传图片到阿里云OSS

后端进行sts认证生成临时身份凭证&#xff0c;前端通过凭证直传图片等文件到OSS中 一 OSS配置 增加用户和角色&#xff0c;创建OSS bucket 1.1 添加用户 登录阿里云管理控制台&#xff0c;右侧头像&#xff0c;进入访问控制 点击左侧导航栏的身份管理的用户&#xff0c;点击…

python- time模块

3种时间格式之间的转换 &#xff1a; 1、时间戳->格式化时间 time.localtime(timestamp)&#xff1a;北京时间 time.gmtime(timestamp) &#xff1a;伦敦时间 2、格式化时间->时间戳时间

PHP网站源码 知识付费分站代理自助下单系统 自带多款模板

源码测评&#xff1a;功能很齐全&#xff0c;有可以对接的总站&#xff0c;应该是对接好就可以推广赚钱了&#xff0c;但是这种感觉能赚钱的就那么几个人&#xff0c;见仁见智吧&#xff01; 截图演示&#xff1a; 转载自 https://www.qnziyw.cn/cmsmb/qtcms/3952.html

【JAVA学习笔记】67 - 坦克大战1.5 - 1.6,防止重叠,记录成绩,选择是否开新游戏或上局游戏,播放游戏音乐

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter20/src 增加功能 1.防止敌人坦克重叠运动 2.记录玩家的成绩&#xff0c;存盘退出 3.记录当时的敌人坦克坐标&#xff0c;存盘退出 4.玩游戏时&#xff0c;可以选择是开新游戏还是继续上局…