Kafka系列一消息队列

news2024/11/26 5:38:54

文章首发于个人博客,欢迎访问关注:https://www.lin2j.tech

消息队列是分布式系统中的重要组件,也是 Java 开发中常用的技术点之一。

使用消息队列可以解决模块间的解耦、流量削峰、异步消息,提高系统的可用性、稳定性以及性能。

消息队列的优点与应用场景

解耦

在大型项目中,如果使用传统的通过方法进行模块间的相互调用的形式,无法保证系统稳定性。

假设任务告警模块需要在触发告警时将告警信息发送给任务管理模块,那么传统模式中,任务告警模块在调用任务管理模块时,将会报错导至告警消息丢失。如下图:

在这里插入图片描述

如果引入消息队列的话,则有告警消息时,任务告警模块将告警信息生产到消息队列。任务管理模块监听消息队列,消息队列有消息时则消费。

这样即使任务管理模块异常了,告警消息也会存在于消息队列中,等待任务管理模块正常后进行消费。两个模块之间通过消息队列进行解耦,达到高可用的目的。如下图:

在这里插入图片描述

流量削峰

在传统架构中,如果有大量的数据库读写请求涌入,一瞬间压在数据库上,数据库有可能吃不消。
如果采用消息队列,系统A按照自身的处理速度去消息队列中去消息,然后做数据库请求,则可以有效的减轻数据库的压力。
流量削峰也可以应用在秒杀活动中,秒杀活动一般会有大量请求涌入。通过设置消息队列的长度来控制活动的人数,也可以减轻秒杀应用的压力。
将先到的请求消息存到消息队列,队列满了之后,则将后到来请求抛弃或者跳转到错误页面,秒杀业务再根据业务逻辑处理消息队列中的消息。如下图:

在这里插入图片描述

异步消息

从前面两个优点也可以看出,发送到消息队列上的时候,生产者可以不用等待消息的处理结果。

一些非必要的业务逻辑参杂在主流程中,会消耗整个流程太多的时间。可以将非必要的业务逻辑消息发送到消息队列,通过异步的方式处理。

比如下单支付之后会有一条短信通知,这个短信通知的部分,就可以通过异步的方式处理,减少支付的响应时间。

在这里插入图片描述

消息队列的缺点

消息队列也不全是好处,引入消息队列还会给系统带来一系列的问题。

增加系统的复杂度

在串行处理的代码逻辑里,按照处理流程一步一步写好就可以了。但是引入消息队列,需要考虑的东西更多,比如如何保证消息不被重复消费、如何保证消息可靠传输以及一致性问题。

系统可用性降低

本来只要系统的各个模块运行正常,就不会有什么问题。但是在引入消息中间件后,还需要维护多一个组件,如果组件挂了,那么整个系统也就瘫痪了。因此,可用性降低了。

研发成本增加

引入消息队列后,首先需要对选择的消息队列有深入的了解,以及相应的技术选型。消息队列本身也比较复杂,需要根据具体的应用场景进行判断。

消息队列的三大重要特性

幂等性

在百度百科中,关于幂等的描述如下:

在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。

生产者在进行重试的时候,有可能会重复写入消息,需要通过消息队列的幂等性来避免这种情况发生。

可以通过为每条消息设置唯一 ID,消费是判断该 ID 是否已经消费过,消费过则丢弃。

顺序性

当两个业务之间存在先后关系时,需要保证操作的顺序性,这样才不会发生业务处理错误。比如有下单和支付两个操作,需要先下单才有支付的操作。

如果有下单消息和支付消息两条队列,它们各自的顺序混乱的,并不是按照消息生产的顺序入队,那么就可能会在支付的时候找不到下单消息,从而导致支付失败。

对于消息中间件的消息顺序性问题,一般通用的处理方案是保证局部的消息有序。

可靠性

消息队列的可靠性指的是消息丢失,如何防止消息丢失,消息丢失后如何处理?

对于消息可靠性来说,如果要保证 100% 不丢消息,需要从生产者、服务器、消费者三个地方入手,做好参数配置和异常处理,尽最大努力保证消息不丢失。

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

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

相关文章

Python编程——深入了解不可变的元组

作者:Insist-- 个人主页:insist--个人主页 本文专栏:Python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、元组是什么 二、元组的定义 1、相同类型组成元组…

如何利用 SmartX 存储性能测试工具 OWL 优化性能管理?

作者:深耕行业的 SmartX 金融团队 张瑞松 运维人员在日常管理集群时,有时难免会产生这样的困惑: 新业务准备上线,在具备多套存储的情况下,应如何选择承载业务的存储环境? 业务虚拟机刚上线时运行速度很快…

<algorithm> 头文件

头文件是 C 标准库中的一个头文件&#xff0c;提供了许多常用的算法函数。除了 erase 之外&#xff0c; 头文件还包含了以下一些重要的函数&#xff1a; 1、排序算法&#xff1a; sort&#xff1a;对容器进行排序。 #include <iostream> #include <algorithm> #…

基于Android的旅游管理系统 微信小程序

随着网络科技的发展&#xff0c;移动智能终端逐渐走进人们的视线&#xff0c;相关应用越来越广泛&#xff0c;并在人们的日常生活中扮演着越来越重要的角色。因此&#xff0c;关键应用程序的开发成为影响移动智能终端普及的重要因素&#xff0c;设计并开发实用、方便的应用程序…

百度文心一率先言向全社会开放 应用商店搜“文心一言”可直接下载

8月31日&#xff0c;文心一言率先向全社会全面开放。广大用户可以在应用商店下载“文心一言APP”或登陆“文心一言官网”&#xff08;https://yiyan.baidu.com&#xff09; 体验。同时&#xff0c;企业用户可以直接登录百度智能云千帆大模型平台官网&#xff0c;调用文心一言能…

IntelliJ IDEA中代码提示功能不见了

IntelliJ IDEA中代码提示功能不见了&#xff1f;试试这几个方法&#xff01; 在我们敲代码的时候&#xff0c;环境中的代码提示功能非常强大且方便。但是这突如其来的问题纠结我两天&#xff0c;不给提示&#xff0c;不给引包&#xff0c;连个错他妹的也不给报。 第一种情况&…

Texlive2023与Texstudio2023卸载与安装(详细全程)

早在两年前安装了texlive2020&#xff0c;最近重新使用总是报错&#xff0c;好像是因为版本过低。我就找了个时间更新一下texlive版本&#xff0c;全程如下。 1、卸载texlive老版本 1&#xff09;找到texlive目录&#xff0c;比如我的是D:\texlive\2022\tlpkg\installer&…

[linux实战] 华为云耀云服务器L实例 Java、node环境配置

系列文章目录 第一章 [linux实战] 华为云耀云服务器L实例 Java、node环境配置 文章目录 系列文章目录前言一、任务拆解二、修改密码三、配置安全规则四、远程登录并更新apt五、安装、配置JDK环境5.1、安装openjdk,选择8版本5.2、检查jdk配置 六、安装、配置git6.1、安装git6.2…

一些git心得:建仓库的最好方式是克隆;每个仓库的设置是比较独立的

背景&#xff1a;最近&#xff0c;我在gitee上新建了一个仓库&#xff0c;然后克隆下来后&#xff0c;发现远程配置竟然自动都配好了。于是&#xff0c;在git的使用上有一了点点新的体会。 一、每个仓库是互相独立的&#xff0c;包括一些设置。 比如上面是两个仓库&#xff0c…

【App出海成功案例】 | NetMarvel 帮助广告主ARPU增长45%,ECPM增长50%,付费率涨幅30%

中国App何以扬帆出海&#xff1f; 出海热发展到今天&#xff0c;中国App席卷西方世界的神话被一一打造&#xff0c;手游/非游双面开花&#xff0c;成功案例作为赛道代表&#xff0c;也成为众多出海广告主一一效仿的风向标。 它们在用户增长、变现收益上的打法是怎样的&#x…

Unity 之 参数类型之值类型参数的用法

文章目录 基本数据类型结构体结构体的进一步补充 总结&#xff1a; 当谈论值类型参数时&#xff0c;我们可以从基本数据类型和结构体两个方面详细解释。值类型参数指的是以值的形式传递给函数或方法的数据&#xff0c;而不是引用。 基本数据类型 基本数据类型的值类型参数&…

Spring Cloud 快速入门基本介绍

&#x1f600;前言 本篇博文是关于Spring Cloud 基本介绍&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x…

3个微信恢复聊天记录的方法,简单易懂

朋友们&#xff0c;我要被自己气死了。手欠删除了微信上的所有聊天对话框&#xff0c;我发誓我真的不知道这样做会清空聊天记录&#xff0c;有什么办法能恢复我的聊天记录吗&#xff1f; 是不是还有很多小伙伴都不知道微信这个令人害怕的操作&#xff1a;删除聊天对话框删除聊天…

MySql刷题知识汇总

1.CHAR_LENGTH &#xff1a; 求varchar类型的长度。

TCP之三次握手四次挥手

在前面的文章中我们了解到http是基于TCP/IP协议的&#xff0c;这篇文章我们来了解一下TCP/IP。 一、TCP与UDP 1、UDP 基于非连接。类似于写信&#xff0c;不能保证对方能不能接收到&#xff0c;接收到的内容是否完整&#xff0c;顺序是否正确。 优缺点&#xff1a;性能损耗小…

【FlowDroid】一、处理流程学习

FlowDroid 一、处理流程学习 下载配置源码概况代码逻辑分析analyzeAPKFilerunInfoflowprocessEntryPointcalculateCallbacks(sourcesAndSinks)再次回到processEntryPoint 自己做一些笔记 下载配置 参照我前面的文章可以使用FlowDroid安装初体验 为了看代码了解FlowDroid如何处…

关于CICD流水线的前端项目运行错误,npm项目环境配置时出现报错:Not Found - GET https://registry.npm...

关于CICD流水线的前端项目运行错误&#xff0c;npm项目环境配置时出现报错&#xff1a;Not Found - GET https://registry.npm… 原因应该是某些jar包缓存中没有需要改变镜像将包拉下来 npm config set registry http://registry.npm.taobao.org npm install npm run build

java实现多文件压缩zip

1&#xff0c;需求 需求要求实现多个文件压缩为zip文件 2&#xff0c;代码 package com.example.demo;import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import…

【宝藏系列】一文带你了解STM32内置的硬件功能安全属性

【宝藏系列】一文带你了解STM32内置的硬件功能安全属性 文章目录 【宝藏系列】一文带你了解STM32内置的硬件功能安全属性&#x1f468;‍&#x1f3eb;概览1️⃣双看门狗&#xff1a;独立看门狗和窗口看门狗2️⃣电源监测3️⃣时钟安全系统CSS4️⃣SRAM奇偶校验位5️⃣硬件ECC6…

【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之数码管动态显示(五)

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处 适用于板卡型号&#xff1a; 紫光同创PGL22G开发平台&#xff08;盘古22K&#xff09; 一&#xff1a;盘古22K开发板&#xff08;紫光同创PGL22G开发…