消息队列中间件介绍

news2024/11/24 22:43:56

13e584d16eb948aca44e30382fb94309.gif消息队列介绍

 

消息队列中间件是大型系统中的重要组件,已经逐渐成为企业系统内部通信的核心手段。它具有松耦合、异步消息、流量削峰、可靠投递、广播、流量控制、最终一致性等一系列功能,已经成为异步RPC的主要手段之一。

目前常见的消息中间件有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ等。

 

消息队列应用场景

消息队列在实际中常见的应用场景有应用解耦、异步处理、流量错峰与流控、日志处理等等。

 

应用解耦

消息中间件顾名思义是用于消息存放的中间件。拿支付订单流程举例,在没有中间件的情况下,流程大致如下:

 

用户支付订单,更新订单状态

调用库存服务,完成响应功能

调用积分服务,完成响应功能

调用短信服务,发送短信通知

这个过程是顺序执行的,如果库存和积分或者短信服务没有及时响应,或者短信服务处理堵塞,客户端用户收到响应的时间将会延长,体验变差。

其实我们知道对于订单流程,只有订单处理才是核心服务,其他依赖系统不是那么重要,可以通知到即可。所以可以使用消息中间件,我们在处理完毕订单之后放入中间件立刻返回,然后后续服务从中间件中拿到数据进行后续的处理。

 

异步处理

异步处理是使用消息中间件的一个重要功能,拿用户注册来说,如果没有消息中间件,流程大致如下:

 

提交注册信息,保存注册信息①

发送注册通知邮件②

发送短信验证码③

这个过程是顺序的,很明显在发送邮件或短信时候有可能因为网络等原因发送有一定延迟,这时候响应时间变长。时间为①+②+③。

在不使用中间件的情况下我们可以稍微改进,可以在注册信息记录完毕之后同时调用发送通知邮件和发送短信验证码的程序。时间为①+(max(②,③))。虽然改进,但是因为使用了并行处理,由于CPU的并行处理能力有限,瓶颈很快就会到来。

可以继续改进,注册信息记录完毕之后写入中间件,立即返回。短信服务和邮件服务从中间件中取出信息发送通知,时间为①+写入中间件时间。

 

流量错峰

在类似于秒杀这样的场景中会在某个时间流量突增,大量的请求同时到达服务端,无疑对后端的压力会大大增加,如果都等着处理完成可能会堵死后续的请求。这时候可以使用消息中间件把需要处理的信息先存储在中间件,也可以控制活动的参与人数。在后续服务程序有能力时再拿出信息进行处理,就可以削平流量峰值。保证处理程序的正常运行。

 

日志处理

在生产环境中,为了监控日志,会有大量的日志需要传输存储检索,现在比较有名的日志处理架构有ELK,在分布式应用中由于日志的数量级越来越大,存储起来对速度的要求也越快越快。这时候需要使用中间件解决大量日志传输的问题,比如Kafka。

下图是一个常见的日志处理架构:

 

 

Kafka:接收用户日志的消息队列。

 

Logstash:做日志解析,统一成JSON输出给Elasticsearch。

 

Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数据存储服务,通过index组织数据,兼具强大的搜索和统计功能。

 

Kibana:基于Elasticsearch的数据可视化组件,超强的数据可视化能力是众多公司选择ELK stack的重要原因。

 

JMS消息服务

JMS是Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。ActiveMQ就是JMS接口的实现。

 

JMS消息模式

大部分的消息队列都有两种通信模式。

 

点对点(Point-to-Point Messaging Domain)

发布-订阅(Publish/Subscribe Messaging Domain)

JMS也不例外的定义了这两种消息发送模型的规范,但是并没有给予实现,实现JMS接口的消息中间件(MOM)称为JMS Provider。

 

点对点

消息到达消息系统,被保留在消息队列中,然后由一个或者多个消费者消费队列中的消息,一个消息只能被一个消费者消费,然后就会被移除。例如订单处理系统。

发布-订阅

消息发送时指定主题(或者说通道),消息被保留在指定的主题中,消费者可以订阅多个主题,并使用主题中的所有的消息,例如现实中的电视与电视频道。所有客户端包括发布者和订阅者,主题中的消息可以被所有的订阅者消费,消费者只能消费订阅之后发送到主题中的消息。

 

JMS编码接口

ConnectionFactory 用于创建连接到消费中间件的连接工厂

Connection 代表了应用程序和消息服务器之间通信的线路

Destination 指消息发布和接收的地点,包括队列和主题

Session 表示一个单线程的上下文,用于发送和接收消息

MessageConsumer 由会话创建,用于接收发送到目标的消息

MessageProducer 由会话创建,用于发送消息到目标

Message 是消费者在生产者之间传送的对象,消息头,一组消息属性,消息体

 

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

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

相关文章

知名高校博士:我改了这2个地方,一开始被秒拒的论文很快就成功发表了~

手稿被拒后,你会怎么做?是直接换期刊重投,还是先仔细修改下论文呢? 伊利诺伊大学博士Sara E. Skrabalak分享了自己在论文被秒拒后,修改了文章部分内容就成功发表的经验。我们来看看她到底做了哪些修改吧 ~ Sara E. Sk…

Java技术总结

Java技术总结 1.高并发1.什么是高并发2.如何提升系统的并发能力3.常见的互联网分层架构整个系统各层次的水平扩展,又分别是如何实施的呢?4.分层水平扩展架构实践5.总结 2.Java 线程的 5 种状态1.新建状态(New):2.就绪状态(Runnable):3.运行状态(Running)…

【企业信息化】第1集 免费开源ERP: Odoo 16 CRM客户关系管理系统

文章目录 前言一、概览二、使用功能1.加快销售速度2.销售线索3.机会4.客户5.高效沟通6.报告7.集成 三、总结 前言 世界排名第一的免费开源ERP: Odoo 16 CRM客户关系管理系统。真正以客户为中心的CRM。 一、概览 获得准确预测 使用可操作数据,以做出更好的决定。 获…

Java --- redis7之缓存预热+雪崩+穿透+击穿

目录 一、缓存预热 二、缓存雪崩 三、缓存穿透 3.1、解决方案 3.1.1、空对象缓存或者缺省值 3.1.2、Goolge布隆过滤器Guava解决缓存穿透 四、缓存击穿 4.1、危害 4.2、解决方案 4.3、模拟百亿补贴活动案例 一、缓存预热 场景:MySQL有N条新记录&#xff…

基于Java的班级管理系统的设计与实现(论文+源码)_kaic

摘 要 伴随着信息技术不断的飞速发展,信息技术给现在的生活也在带来翻天覆地的变化。信息时代的到来已经成为一种趋势,人类的发展历史正在进入到一个新的时代。信息技术已经在生活中的各个领域得到普及以及被应用。班级管理在信息技术发展之前一直都是…

金子数量——c++

金子数量 Description 某地区有n条(编号依次为1到n)互不交叉的道路,每条道路上都有m个数字,其中能被8整除的数称为金子数,这个数字表示其重量。 如下表是3条道路,每条道路中有5个数的一种可能情况。 苏海想在n条道路中走一条金子…

[架构之路-195]-《软考-系统分析师》- MVC、MVP、MVVM架构各自的优缺点

目录 一、MVC 1.1 MVC的基本结构 1.2 MVC的工作流程 1.3 MVC的优缺点 二、MVP 2.1 MVP的基本结构 2.2 MVP的工作流程 2.3 MVP的优缺点 三、MVVM 3.1 MVVM的基本结构 3.2 MVVM的工作流程 3.3 MVVM的优缺点 前言: MVC:一个controller对应多个v…

Windows SSH远程连接Linux服务器 - 无公网IP内网穿透

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

学系统集成项目管理工程师(中项)系列02_文件和标准

1. 文件 1.1. 2020 年 4 月,中共中央国务院颁发《关于构建更加完善的要素市场化配置体制的意见》首次将数据作为一种新型的生产要素置入文件 1.1.1. 【21下选01】 1.2. 2021 年印发的 5G 应用扬帆行动计划(2021-2023)的通知到 2023 年,我国 5G 应用发…

数列合并C语言

已知两个不同长度的降序排列的数列(假设序列的长度都不超过5),请编程将其合并为一个数列,使合并后的数列仍保持降序排列。 【提示】假设两个降序排列的数列分别保存在数组a和数组b中,用一个循环,从前往后依…

利用 Amazon API Gateway 和 Amazon Lambda 处理 Cloudfront 的内容请求

概述 国内 Amazon Cloudfront 目前不支持 Lambdaedge 功能,不能实现基于 CDN 的 A/B 测试、rewrite、redirect、token 认证和产生 response 等功能,本文介绍如何利用 API Gateway 和 Lambda 实现 Lambdaedge 的功能。下面实验介绍通过 request header 参…

HttpClient5如何进行代理

文章目录 说明原始HttpClient代理HttpClient总结 说明 在这篇文章中会对HttpClient5如何进行代理进行说明,我的HttpClient版本是5.2.1。在进行代理之前请先准备好代理服务器。 原始HttpClient 下面是没有进行代理设置的代码,尝试去访问openai接口 Tes…

GPT-1面试题

简介 1、GPT-1 是什么?它是基于什么模型的? GPT-1 是一种用于自然语言处理的机器学习模型,它是基于 Transformer 架构的。它是 OpenAI 在 2018 年发布的第一个 GPT 模型,有 1.17 亿个参数,比之前的语言模型有了显著的…

PowerShell

2023年5月12日,周五晚上: 今天突然对看到了一篇关于Linux的Shell的文章,引起了我的兴趣,但由于我的电脑没有虚拟机,所以我决定研究研究一下windows的PowerShell,感觉还挺好玩的。 打开了一个新世界。 不…

【最新可用】chatGPT镜像网站国内使用,免费稳定!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT 2023.5.8新增一个 ChatGPT 国内免翻版 【网站名称】:Chat GPT Ai 【使用环境】:移动端/电脑网页端 ChatGPT是一款功能强大的免费在线聊天机器人,具有人工智能…

Bean的生命周期及演示

文章目录 一、介绍概念组成: 二、实例演示 一、介绍 概念 Bean的生命周期是指一个Bean对象从创建到销毁的整个存在过程。 组成: 1.实例化Bean(为Bean分配内存空间) 2.属性注入 (Bean注入和装配) 3.Bean的初始化 各种通知&#…

【Midjourney】Midjourney 辅助工具 ② ( 自定义命令工具 | 设置颜色 | 设置材质 | 设置随机种子 | 设置图片链接 )

文章目录 一、Midjourney Prompt Tool 自定义命令工具1、设置颜色参数2、设置材质参数3、设置随机种子参数4、设置图片链接 Midjourney 提示词命令 可以使用 辅助工具 进行生成 , 辅助工具如下 : Midjourney Prompt Tool 自定义命令工具Midjourney Prompt Generator 命令生成器…

C语言实现【三子棋小游戏】

Hello,各位小伙伴们好啊,这篇博客是用C语言实现了三子棋的游戏,感兴趣的友友可以试试玩哦~ 咦,当我们以玩家的身份和电脑玩这个游戏的时候,有哪些步骤呢?那么,反过来,我们设计游戏的…

C++智能指针的原理、分类、使用

1. 智能指针介绍 为解决裸指针可能导致的内存泄漏问题。如: a)忘记释放内存; b)程序提前退出导致资源释放代码未执行到。 就出现了智能指针,能够做到资源的自动释放。 2. 智能指针的原理和简单实现 2.1 智能指针的原…

『python爬虫』19. aiohttp模块应用之下载图片(保姆级图文)

目录 1. aiohttp库安装2. 代码解析3. 实现代码总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 通过爬取下载得到图片 1. aiohttp库安装 pip install aiohttp这个库的作用基本上和request一致,理解…