浅聊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的运行…...
服务器被暴力破解的一次小记录
1. 网络架构 家里三台主机,其他一台macmini 启用ollama运行大模型的服务,主机1用来部署一些常用的服务如:mysql, photoprism等,服务器作为网关部署docker, 并且和腾讯云做了内网穿透。服务器部署了1panel用来管理服务并且监控&…...
3. 导入官方dashboard
官方dashboard:https://grafana.com/grafana/dashboards 1. 点击仪表板 - 新建 - 导入 注:有网络的情况想可以使用ID,无网络情况下使用仪表板josn文件 2. 在官方dashboard网页上选择符合你现在数据源的dashboard - 点击进入 3. 下拉网页选…...
国家队出手!DeepSeek上线国家超算互联网平台!
目前,国家超算互联网平台已推出 DeepSeek – R1 模型的 1.5B、7B、8B、14B 版本,后续还会在近期更新 32B、70B 等版本。 DeepSeek太火爆了!在这个春节档,直接成了全民热议的话题。 DeepSeek也毫无悬念地干到了全球增速最快的AI应用。这几天,国内的云计算厂家都在支持Dee…...
第6章 6.4 ASP.NET Core Web API各种技术及选择
6.4.1 控制器父类用哪个 6.2小节和6.3小节所演示的ASP.NET Core Web API 的控制器类都继承自ControllerBase,而6.1中MVC的控制器继承自Controller,Controller又继承自ControllerBase。 所以,一般情况下,编写的WebAPI控制器类继承…...
python导入模块的方式
在python开发中,巧用模块导入可简化开发,提高开发效率。下面简介下模块使用使用事项: 一、模块的使用: 模块 就好⽐是 ⼯具包,要想使⽤这个⼯具包中的⼯具,就需要 使用import导⼊ 这个模块每⼀个以扩展名…...
【Linux】Ubuntu Linux 系统——Node.js 开发环境
ℹ️大家好,我是练小杰,今天星期五了,同时也是2025年的情人节,今晚又是一个人的举个爪子!! 🙂 本文是有关Linux 操作系统中 Node.js 开发环境基础知识,后续我将添加更多相关知识噢&a…...
使用pyCharm创建Django项目
使用pyCharm创建Django项目 1. 创建Django项目虚拟环境(最新版版本的Django) 使用pyCharm的创建项目功能,选择Django,直接创建。 2. 创建Django项目虚拟环境(安装特定版本) 2.1创建一个基础的python项目 2.2 安装指定版本的D…...
【前端框架】深入Vue 3组件开发:构建高效灵活的前端应用
一、引言 Vue 3作为一款流行的前端框架,其组件化系统是构建大型应用的核心。通过将应用拆分为多个可复用的组件,不仅能提高代码的可维护性与复用性,还能让开发团队进行高效的协作。本文将深入探讨Vue 3组件开发的各个方面,帮助开…...
基于Python flask-sqlalchemy的SQLServer数据库管理平台
适应场景: 主要用于帮助DBA自动化很多日常工作,包括: 数据库状态监控 性能问题诊断 日志分析 自动巡检 问题告警 系统截图: main.py from flask import Blueprint, render_template, request, flash, redirect, url_for f…...
npm运行Vue项目报错 error:0308010c:digital envelope routines::unsupported
大家好,我是 程序员码递夫。 问题 VSCode 运行Vue项目,提示错误: building 2/2 modules 0 activeError: error:0308010c:digital envelope routines::unsupported 解决方法 原因是 npm 高版本(大于17),对ssl的处理做了改进&…...
计数排序
目录 计数排序原理和步骤: 完整代码实现: 计数排序原理和步骤: 当一段数据比较集中在一个范围,比如 98,95,98,91,90,93,94,97,93&…...
MyBatis拦截器终极指南:从原理到企业级实战
在本篇文章中,我们将深入了解如何编写一个 MyBatis 拦截器,并通过一个示例来展示如何在执行数据库操作(如插入或更新)时,自动填充某些字段(例如 createdBy 和 updatedBy)信息。本文将详细讲解拦…...
Pythong 解决Pycharm 运行太慢
Pythong 解决Pycharm 运行太慢 官方给Pycharm自身占用的最大内存设低估了限制,我的Pycharm刚开始默认是256mb。 首先找到自己的Pycharm安装目录 根据合适自己的改 保存,重启Pycharm...
双ESP8266-01S通讯UDP配置
第一台ESP8266(发送命令需要勾---发送新行) ATCWMODE3 ATCWSAP_DEF"CAR_wifi_Master","12345678",5,3 //设置本地wifi名称以及密码 ATCIPSTA_DEF"192.168.4.1" //设置本地IP ATCIFSR …...
Molecular Communication(分子通信)与 Molecular Semantic Communication(分子语义通信)
1. 引言 随着传统无线通信在极端环境(如微观生物体内、海洋深处)中的局限性凸显,分子通信(Molecular Communication, MC)成为一种新型通信范式。分子通信通过分子作为信息载体,在纳米尺度上传输信息&#…...
Cookie:网页浏览背后的“小秘密”
在现代互联网的世界里,Cookie 是一个几乎无处不在的概念。它不仅影响着我们的网页浏览体验,还在背后默默地支持着许多网站的功能和服务。本文将带你全面了解 Cookie 的原理、作用、安全性以及如何管理它们。 一、什么是 Cookie? Cookie 是一…...
日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(6):動詞ない形について句型
日语学习-日语知识点小记-构建基础-JLPT-N4&N5阶段(6):動詞ない形について句型 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)~動詞な形 +なければなりません(2)~動詞な形 + なくてもいいです(3)に まで までに :区別3、单词(1)日语单词…...
华纳云:如何从服务器日志中发现僵尸进程?
在 CentOS 系统中,僵尸进程通常指那些已经完成执行但仍然在进程表中存在的进程。它们没有实际的执行,但仍然占用系统资源,通常会出现在父进程没有及时回收子进程的状态下。虽然僵尸进程本身不消耗 CPU 或内存资源,但它们会占用进程…...
fastadmin 接口请求提示跨域
问题描述 小程序项目,内嵌h5页面,在h5页面调用后端php接口,提示跨域。网上查找解决方案如下: 1,设置header // 在入口文件index.php直接写入直接写入 header("Access-Control-Allow-Origin:*"); header(&q…...
NHANES指标推荐:DDA!
文章题目:Association of dietary decanoic acid intake with diabetes or prediabetes: an analysis from NHANES 2005-2016 DOI:10.3389/fnut.2024.1483045 中文标题:饮食中癸酸摄入量与糖尿病或糖尿病前期的关系:2005-2016 年 …...
用大模型学大模型04-模型与网络
目前已经学完深度学习的数学基础,开始学习各种 模型和网络阶段,给出一个从简单到入门的,层层递进的学习路线。并给出学习每种模型需要的前置知识。增加注意力机制,bert, 大模型,gpt, transformer, MOE等流行…...
PostgreSQL 数据库压力测试指南
一、为什么需要压力测试? 数据库需要进行压力测试的原因主要包括以下几个方面: 性能评估:通过压力测试,可以了解数据库在高负载情况下的性能表现,包括响应时间、吞吐量和资源利用率等。这有助于确定系统的性能瓶颈。 …...
oppo,康冠科技25届春招内推
oppo,康冠科技25届春招内推 ①康冠科技25届春招 【职位】算法、软件、硬件、技术,结构设计,供应链,产品,职能,商务 【一键内推】https://sourl.cn/2Mm9Lk 【内推码】EVBM88 ②OPPO 2025届春招内推 招聘岗位…...
元学习之孪生网络Siamese Network
简介:元学习是一种思想,一般以神经网络作为特征嵌入的工具,实现对数据特征的提取,然后通过构造某种指标以引导优化器对模型参数进行优化。而最小化距离是最常见的学习目标,这就是熟知的度量学习,度量学习里…...
Python----PyQt开发(PyQt高级:组件大小,界面位置,按钮,文本显示,文本输入,字体大小)
一、大小 setMinimumSize(width, height) 描述: 设置控件的最小尺寸。控件不会被缩小到比这个尺寸更小的大小。 参数: width: 最小宽度(以像素为单位)。 height: 最小高度(以像素为单位)。 button.setMinimumSize(100, …...
qt + opengl 给立方体增加阴影
在前几篇文章里面学会了通过opengl实现一个立方体,那么这篇我们来学习光照。 风氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子: 1 环境光照(Ambient …...
vue2老版本 npm install 安装失败_安装卡主
vue2老版本 npm install 安装失败_安装卡主 特别说明:vue2老版本安装慢、运行慢,建议升级vue3element plus vite 解决方案1: 第一步、修改npm 镜像为国内镜像 使用淘宝镜像: npm config set registry https://registry.npmmir…...
20250213编译飞凌的OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1
20250213编译飞凌的OK3588-C_Linux5.10.209Qt5.15.10_用户资料_R1 2025/2/13 11:43 缘起:飞凌发布了高版本内核的适配OK3588-C的Buildroot的SDK:OK3588-C_Linux5.10.209Qt5.15.10_用户资料_R1。 但是编译异常了。 于是按照百度升级libc6,可以…...
中望CAD c#二次开发 ——VS环境配置
新建类库项目:下一步 下一步 下一步: 或直接: 改为: <Project Sdk"Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>NET48</TargetFramework> <LangVersion>pr…...
