浅聊MQ之Kafka与RabbitMQ简用
(前记:内容有点多,先看目录再挑着看。)
Kafka与RabbitMQ的使用举例
Kafka的使用举例
-
安装与启动:
- 从Apache Kafka官网下载Kafka中间件的运行脚本。
- 解压后,通过命令行启动Zookeeper(Kafka的运行依赖于Zookeeper)。
- 启动Kafka的服务器进程。
-
基本功能实现:
- 生产者:启动生产者进程,向指定的主题(Topic)发送消息。
- 消费者:启动消费者进程,从指定的主题中接收并处理消息。
-
高级功能:
- 分区与复制:Kafka通过分区实现数据的并行处理,通过复制实现数据的高可用性。
- 日志压缩:Kafka支持日志压缩功能,以减少存储空间的占用。
-
应用场景:
- 日志收集与处理:Kafka可以高效地收集和处理来自不同源头的日志数据。
- 实时数据流处理:Kafka支持实时数据流的处理和分析,适用于金融、物联网等领域。
RabbitMQ的使用举例
-
安装与配置:
- 安装Erlang语言支持(因为RabbitMQ需要Erlang的支持)。
- 从RabbitMQ官网下载并安装RabbitMQ服务器。
- 启动RabbitMQ服务,并配置用户、权限和插件等。
-
消息传递过程:
- 生产者:将消息发送到RabbitMQ的交换机(Exchange),交换机根据路由键(Routing Key)将消息路由到指定的队列(Queue)中。
- 消费者:从队列中获取消息并进行处理。
-
高级功能:
- 消息持久化:RabbitMQ支持消息的持久化存储,以防止消息丢失。
- 消息确认机制:消费者在处理完消息后,需要向RabbitMQ发送确认消息,以确保消息被正确处理。
-
应用场景:
- 异步处理:通过RabbitMQ实现应用程序的异步处理,提高系统的并发性能和可靠性。
- 应用解耦:不同的应用程序之间可以通过RabbitMQ进行通信,实现应用程序之间的解耦。
在ERP项目中使用消息队列中间件
在ERP项目中,消息队列中间件(如Kafka或RabbitMQ)可以发挥重要作用,特别是在订单模块中。以下以RabbitMQ为例,说明其在ERP项目中的使用:
-
订单系统与其他系统的解耦:
- 当订单系统接收到用户提交的订单后,可以将订单信息发送到RabbitMQ的消息队列中。
- 库存系统、支付系统、物流系统等订阅相应的消息队列,即可实现订单信息的同步处理。
- 这种解耦方式使得各个系统可以独立开发和部署,提高了系统的可维护性和可扩展性。
-
异步通信与性能提升:
- 订单系统不再需要等待其他系统处理完成后再进行下一步操作,而是可以将订单信息发送到RabbitMQ后立即返回响应给用户。
- 其他系统可以在后台异步处理订单消息,减少了用户等待时间,提升了用户体验。
-
流量削峰与稳定性保障:
- 在高并发场景下,如秒杀、抢购等活动期间,RabbitMQ可以作为一个缓冲层,将大量的订单请求暂时存储在消息队列中。
- 然后按照一定的速率将这些请求分发给后端系统进行处理,有效避免了后端系统因瞬间流量过大而崩溃的问题。
-
消息确认与最终一致性:
- RabbitMQ提供了消息确认机制,可以确保消息被正确处理和消费。
- 即使在出现故障的情况下,也可以通过重试、死信队列等方式来保证消息不会丢失或重复消费,从而实现了最终一致性。
综上所述,Kafka和RabbitMQ等消息队列中间件在ERP项目中具有广泛的应用前景,特别是在订单模块中,它们可以实现服务间的解耦、异步通信、流量削峰以及提高系统的可伸缩性和最终一致性等功能。
-----分界线--------------------------------------------------------------------------------------------------
关于RabbitMQ在异步处理和应用解耦方面的具体应用场景示例:
一、异步处理
-
用户注册后的邮件和短信通知
-
场景描述:用户在网站上注册账号后,系统需要发送注册成功邮件和短信。如果在用户提交注册请求时同步完成这些操作,可能会因为邮件或短信服务的延迟导致用户等待时间过长,影响体验。
-
解决方案:在用户注册成功后,将发送邮件和短信的任务消息发送到RabbitMQ队列中,由后台服务异步处理这些任务。这样,用户注册流程可以快速完成,而邮件和短信的发送则在后台逐步处理。
-
优势:提升用户响应速度,优化用户体验,同时将非关键流程异步化,避免因慢服务拖累主流程。
-
-
订单处理中的异步任务
-
场景描述:在电商平台中,用户下单后需要进行库存管理、支付确认等多个步骤。如果这些步骤全部同步执行,可能会导致系统响应缓慢,尤其是在高并发场景下。
-
解决方案:将订单信息发送到RabbitMQ队列中,由不同的服务(如库存服务、支付服务)分别从队列中获取消息并处理。例如,订单服务生成订单后,将消息发送到队列,库存服务和支付服务分别监听队列并执行相应任务。
-
优势:提高系统的并发性能,确保处理流程的连续性和效率。
-
-
文件处理任务的异步执行
-
场景描述:用户上传大文件后,需要对文件进行处理(如格式转换、压缩等)。如果同步执行这些任务,前端页面可能会一直加载,导致用户体验差。
-
解决方案:用户上传文件后,将处理任务消息发送到RabbitMQ队列中,由后台服务异步处理文件,处理完成后通知用户或更新状态。
-
优势:提升用户体验,主线程迅速返回,减少用户等待时间。
-
二、应用解耦
-
微服务架构中的服务通信
-
场景描述:在微服务架构中,各个服务之间需要进行通信。如果直接调用对方的API,服务之间的耦合度会很高,一个服务的故障可能会导致整个系统瘫痪。
-
解决方案:通过RabbitMQ实现服务之间的消息传递。例如,订单服务生成订单后,将消息发送到队列,库存服务和支付服务分别从队列中获取消息并处理。这种方式减少了服务之间的直接依赖。
-
优势:降低服务之间的耦合度,便于独立扩展和维护。
-
-
多系统之间的数据同步
-
场景描述:在一个分布式系统中,多个服务依赖同一份数据源。例如,电商平台的订单状态更新后,需要同步到缓存系统和推荐系统。如果让每个服务直接从数据库拉取数据,会增加数据库压力,还可能出现延迟或不一致的问题。
-
解决方案:利用RabbitMQ进行数据同步。订单服务更新订单状态后,将更新信息发送到队列,缓存服务和推荐服务从队列中消费消息并同步数据。
-
优势:减轻数据库压力,实现最终一致性,即使某个服务处理延迟,RabbitMQ也能保障消息不丢失。
-
-
广播通知
-
场景描述:当某个事件发生时,需要通知多个服务。例如,商品价格调整后,库存系统、搜索系统和推荐系统都需要同步更新。
-
解决方案:使用RabbitMQ的广播模式(Fanout),将消息发送到交换机,多个消费者(如库存服务、搜索服务)订阅该交换机,实现消息的“一发多收”。
-
优势:扩展性强,多个服务都能接收到同一条消息。
-
-----分界线--------------------------------------------------------------------------------------------------
注意MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别;
URL: 浅识MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别-CSDN博客
注意:持久化策略
URL:浅聊MQ之Kafka、RabbitMQ、ActiveMQ、RocketMQ持久化策略-CSDN博客
(抱歉,最近在面试,粗糙了些。)
(望各位潘安、各位子健/各位彦祖、于晏不吝赐教!多多指正!🙏)
相关文章:
浅聊MQ之Kafka与RabbitMQ简用
(前记:内容有点多,先看目录再挑着看。) Kafka与RabbitMQ的使用举例 Kafka的使用举例 安装与启动: 从Apache Kafka官网下载Kafka中间件的运行脚本。解压后,通过命令行启动Zookeeper(Kafka的运行…...
【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框
前言 目前使用vue-element-plus-admin想要做一个系统定时任务功能,可以选择不同的定时任务类型,比如使用cron表达式、周期执行、指定时间执行等。每种类型对应不同的输入框,需要动态显隐输入框才行,但是这个vue-element-plus-adm…...
SpringBoot开发——初步了解SpringBoot
文章目录 一、SpringBoot简介 1、什么是Spring Boot2、Spring Boot的优点3、Spring Boot功能 二、Spring与Spring Boot对比三、Spring Boot与Spring MVC四、Spring Boot体系结构五、Springboot Initializr 1、Spring Initializr2、Spring Initializr模块 一、SpringBoot简介…...
双轴伺服电机驱动控制器AGV、AMR专用双伺服电机驱动控制器解决方案
工业机器人数控机床XY机械手双轴机器人堆垛机专用双轴伺服电机驱动控制器48V 14ARMS带有STO功能,隔离高压CAN/RS485/USB通讯支持编码器和霍尔输入 双伺服电机驱动控制器TMCM2611功能介绍 集成2个伺服电机的控制和驱动于一体供电电压48V,驱动电流14A RM…...
【VB语言】EXCEL中VB宏的应用
【VB语言】EXCEL中VB宏的应用 文章目录 [TOC](文章目录) 前言一、EXCEL-VB1.实验过程2.代码 二、EXCEL-VB 生成.c.h文件1.实验过程2.代码 四、参考资料总结 前言 1.WPS-VB扩展包 提示:以下是本篇文章正文内容,下面案例可供参考 一、EXCEL-VB 1.实验过…...
Ubuntu添加桌面快捷方式
以idea为例 一. 背景 在ubuntu中,很多时候是自己解压的文件并没有桌面快捷方式,需要自己找到对应的目录的执行文件手动打开,很麻烦 而只需要在 /usr/share/applications 中创建自定义的desktop文件就能自动复制到桌面 二. 添加方法 创建desk…...
10G EPON光模块
一、10G EPON对称光模块 工作模式:上行突发接收、下行连续发射。 工作原理:当需要发送信号时,系统信号通过光模块的电接口把信号传送到驱动芯片,芯片处理后,驱动激光器发出调制光信号,经光纤发到远端&…...
Elasticsearch+Logstash+Kibana可视化集群部署
文章目录 1.组件介绍简述2.集群规划3.Es组件部署4.Logstash组件部署5.Kibana组件部署6.Kibana的基础使用 1.组件介绍简述 Elasticsearch:开源实时分布式搜索和分析引擎,支持大规模数据存储和高吞吐量,提供丰富的搜索功能和可扩展性。 Logsta…...
基于CanMV IDE 开发软件对K210图像识别模块的开发
简介 CanMV IDE 是一款专为 K210 芯片设计的图形识别 Python 软件,它提供了强大的功能,帮助开发者轻松实现基于 K210 芯片的图形识别应用。无论你是初学者还是经验丰富的开发者,CanMV IDE 都能为你提供便捷的开发环境和丰富的资源。 硬件资…...
win11系统 Docker Desktop提示Docker Engine stopped解决全过程记录
DockerDesktop安装指南以及Windows下WSL2和 Hyper-V相关问题追查 【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录 本篇文章主要记录Docker Desktop安装和使用时出现的问题及解决方法,以及后续使用夜神模拟器,关闭了Hyper-V时&am…...
工作室如何实现一机一IP
对于工作室而言,多开游戏账号却是其运营模式的核心需求。他们通过大量囤积金币、资源,再将其变现来获取利润。在这种运营模式下,账号数量直接关系到工作室的收益,所以解决 IP 问题就成了手游工作室发展道路上的首要难题࿰…...
WEB安全--SQL注入--二次注入
一、原理: 二次注入的关键在于攻击者的输入并不立即执行,而是经过某些存储或处理后,在后续某个步骤中再触发注入攻击 二、示例: 2.1、sqli-labs-master/less-24: admin# 第一次在网页注册账号和密码时没有漏洞&#x…...
构建现代微服务安全体系:Spring Security、JWT 与 Spring Cloud Gateway 实践
构建现代微服务安全体系:Spring Security、JWT 与 Spring Cloud Gateway 实践 本文将基于提供的代码示例,详细介绍如何在一个Java微服务项目中使用Spring Security、JWT和Spring Cloud Gateway来构建一个高效且安全的微服务体系,并整合性能优…...
Spring Boot 动态数据源实操指南
在实际开发中,我们经常会遇到需要动态切换数据源的场景,比如多租户系统、读写分离、分库分表等。Spring Boot 提供了灵活的配置方式,结合 AbstractRoutingDataSource 可以轻松实现动态数据源切换。本文将带你一步步实现 Spring Boot 动态数据…...
HBase高级技巧:解锁更强大的数据处理能力
HBase高级技巧:解锁更强大的数据处理能力 嘿,小伙伴们!在掌握了HBase的基本操作之后,今天我们将深入探讨一些HBase的高级技巧。这些技巧将帮助你在面对复杂的数据处理需求时更加得心应手,进一步提升系统的性能和可靠性…...
【进阶】JVM篇
为什么学习jvm 1、面试的需要 学过java的程序员对jvm应该不陌生,程序员为什么要学习jvm呢?其实不懂jvm也可以照样写出优质的代码,但是不懂jvm会被大厂的面试官虐的体无完肤。 2、高级程序员需要了解 jvm作用 jvm负责把编译后的字节码转换…...
DeepSeek官方推荐的AI集成系统
DeepSeek模型虽然强大先进,但是模型相当于大脑,再聪明的大脑如果没有输入输出以及执行工具也白搭,所以需要有配套工具才能让模型发挥最大的作用。下面是一个典型AI Agent架构图,包含核心组件与数据流转关系: #mermaid-…...
【动态规划篇】:当回文串遇上动态规划--如何用二维DP“折叠”字符串?
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:动态规划篇–CSDN博客 文章目录 一.回文串类DP核心思想(判断所有子串是否是回文…...
JENKINS(全面)
一.linux系统中JENKINS的安装 注意:安装jenkins需要安装jdk,而且具体版本的jenkins有相对应的jdk版本。可参考以下链接。 Redhat Jenkins 软件包https://pkg.jenkins.io/redhat-stable/https://pkg.jenkins.io/redhat-stable/https://pkg.jenkins.io/r…...
Promise详解大全:介绍、九个方法使用和区别、返回值详解
Promise的介绍 Promise是异步编程的一种解决方案,它的构造函数是同步执行的,then 方法是异步执行的,所以Promise创建后里面的函数会立即执行,构造函数中的resolve和reject只有第一次执行有效,,也就是说Pro…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
