ActiveMQ消息中间件介绍

news2024/11/19 15:22:38

d89fca9ba38645409209c5d045102b41.jpg一、ActiveMQ简介

 

  ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provide实现。尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中仍然扮演这特殊的地位。

 

二、ActiveMQ应用场景

  消息队列在大型电子商务类网站,如京东、淘宝、去哪儿等网站有这深入的应用。

 

队列的主要作用:消除高并发访问高峰,加快网站的响应速度。

 

在不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下,对数据库造成巨大的压力,同时也使系统响应延迟加剧;

 

早使用队列后,用户的请求发给队列后立即返回;

 

例如:当然不能直接给客户提示订单提交成功,在淘宝上提示:"您提交了订单,请等等系统确认"

 

再由消息队列的消费者进程从消息队列中获取数据库,异步写入数据库。

 

由于消息队列的服务处理速度远快于数据库,因此用户的响应延迟可能得到有效改善。

 

流程图解,如下图:

 

 

 

三、消息队列说明

  消息队列中间是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量消峰等问题;

 

实现高性能,高可用,可伸缩和最终一致性架构;是大型分布式系统不可缺少的中间件。

 

目前在生产环境使用较多的消息队列:ActiveMQ、RabbitMQ、Kafka、ZeroMQ、MetaMQ、RocketMQ等。

 

四、消息队列应用场景

1,异步处理

场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种方式:串行方式、并行方式;

 

(1)串行方式:将注册信息写入数据库成功后,发生注册邮件,再发生注册短信。以上三个任务完成后,返回给客户端。

 

 

 

(2)并行方式:将注册信息写入数据库成功后,发生注册邮件的同时,发生注册短信,以上三个任务完成后,返回给客户端,与串行的差别是,并行的方式可以提高处理时间;

 

 

 

假设三个业务节点每个使用50ms,不考虑网络等其他开销,则串行方式的耗时是150ms;并行的耗时是100ms;

 

因为CPU在单位时间内处理的请求数是一定的,假设CPU 1秒内吞吐量是100次;则串行方式1秒内CPU可以处理的请求量是7次(1000/150);并行方式可处理请求量是10次(1000/100);

 

综上所述,传统的方式系统的性能(并发量、吞吐量、响应时间)会有瓶颈。如何解决这个问题?

 

引入消息队列,将不是必须的业务逻辑,异步处理,改造后的架构如下图:

 

 

 

安装上述约定,用户的响应时间相当于是注册信息写入数据库的时间,也是就是50ms.

 

注册邮件,发短信写入消息队列后,直接放回,因此写入消息队列的速度很快,基本可以忽略。

 

采用消息队列后用户的响应数据可能就是50ms。所以基于此架构,系统的吞吐量提高到每秒20QPS;比串行提高了3倍,比并行提高了2倍。

 

2,应用解耦

场景说明:用户下单后,订单系统需要通知库存系统。传统的做法:订单系统调用库存系统接口。如下图:

 

 

 

传统模式的缺点:

 

  1>.假如库存系统无法访问,则订单减库存将失败,从而导致订单失败;

 

  2>.订单系统与库存系统耦合;

 

如何解决以上问题?引入应用消息队列后的方案,如下图:

 

 

 

  1>.订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功,请等等物流配送。

 

  2>.库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。

 

  3>.假如在下单时库存系统不能正常使用,也不影响正常下单。因为下单后,订单系统写入消息队列就不再关系其他的后续操作了,实现订单系统与库存系统的应用解耦。

 

3,流量消峰

流量消峰也是消息队列中的常用场景,一般在秒数或者团抢活动中使用广泛。

 

应用场景:秒数活动,一般因为流量过大,导致流量暴增,应用容易挂掉。为解决这个问题,一般需要在应用前端假如消息队列。

 

(1)可以控制活动人数。

 

(2)可以缓解短时间内高流量压垮应用;

 

 

 

引入消息队列:

 

  1>.用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或者跳转到错误页面;

 

  2>.秒杀业务根据消息队列的请求信息,再做后续处理;

 

4,消息通讯

 消息通讯是指:消息队列一般都内置了高效的通讯机制,因此也可以用在纯的消息通讯。比如实现点对点的消息队列或者聊天室等。

 

(1)点对点通讯

 

 

 

客户端A和客户端B使用同一队列,进行消息通讯。

 

(2)聊天室通讯(发布订阅)

 

 

 

客户端A、客户端B、客户端N订阅同一主题,进行消息发布和接收,实现类是聊天室效果。

 

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

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

相关文章

【逐步剖C】-第十一章-动态内存管理

一、为什么要有动态内存管理 从我们平常的学习经历来看,所开辟的数组一般都为固定长度大小的数组;但从很多现实需求来看需要我们开辟一个长度“可变”的数组,即这个数组的大小不能在建立数组时就指定,需要根据某个变量作为标准。…

小样本学习——匹配网络

目录 匹配网络 (1)简单介绍: (2)专业术语 (3)主要思想 (4)训练过程 问题 回答 MANN 匹配网络 (1)简单介绍: Matching netwo…

【C++设计模式之装饰模式:结构型】分析及示例

装饰模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时动态地给一个对象添加额外的行为。 描述 装饰模式通过创建一个包装器(Wrapper)来包裹原始对象,并在原始对象的行为前后添加额外的功能。…

JAVA学习(5)-全网最详细~

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

git提交代码的流程

1.拉取代码 当你进入了一家公司就需要拉去公司的代码进行开发,此时你的项目小组长会给你个地址拉代码, git clone 公司项目的地址 此时如果不使用了这个方式拉去代码,拉去的是master分支上的代码,但是很多数的情况下,公司的项目可能会在其它的分支上,因此到公…

XXL-JOB源码梳理——一文理清XXL-JOB实现方案

分布式定时任务调度系统 流程分析 一个分布式定时任务,需要具备有以下几点功能: 核心功能:定时调度、任务管理、可观测日志高可用:集群、分片、失败处理高性能:分布式锁扩展功能:可视化运维、多语言、任…

微信小程序代驾系统源码(含未编译前端,二开无忧) v2.5

简介: 如今有越来越多的人在网上做代驾,打造一个代驾平台,既可以让司机增加一笔额外的收入,也解决了车主酒后不能开发的问题,代驾系统基于微信小程序开发的代驾系统支持一键下单叫代驾,支持代驾人员保证金…

【15】c++设计模式——>抽象工厂模式

在海贼世界中,位于水之都的弗兰奇一家是由铁人弗兰奇所领导的以拆船为职业的家族,当然了他们的逆向工程做的也很好,会拆船必然会造船。船是海贼们出海所必备的海上交通工具,它由很多的零件组成,从宏观上看它有这么几个…

数据结构--》探索数据结构中的字符串结构与算法

本文将带你深入了解串的基本概念、表示方法以及串操作的常见算法。通过深入理解串的相关概念和操作,我们将能够更好地应用它们来解决算法问题。 无论你是初学者还是进阶者,本文将为你提供简单易懂、实用可行的知识点,帮助你更好地掌握串在数据…

【云笔记篇】Microsoft OneNote笔记插件推荐OneMore

【云笔记篇】Microsoft OneNote笔记插件推荐OneMore OneMore插件是一款非常强大,多达一百多个扩展功能的OneNote笔记插件,而且免费开源,不断更新的优秀插件—【蘇小沐】 1、实验 【OneMore官网:OneMore - a OneNote add-in (on…

使用idea 中的rest 将 git 合并部分分支代码到主分支

需求:当要将dev的分支中的部分代码合并到test分支时,又不想把dev的全部代码合并到test分支 例如dev分支已经提交了 demo1到4,到想把demo1-3的代码合并到test分支,demo4暂时不合并 可以使用idea的reset 功能满足以上需求 1首先切…

Activity之间数据回传【Android、activity回传、结合实例】

任务要求 在Android应用中,有时需要从一个Activity向另一个Activity传递数据,并在第二个Activity处理后将结果传递回第一个Activity。 这种情况下,我们可以使用startActivityForResult()和onActivityResult()方法来实现数据回传。 实现步骤…

Day-07 修改 Nginx 配置文件

至此: 简单的 Docker 安装 Nginx并启动算是成功了! ps: 如何修改 Nginx的配置、更改nginx 的资源文件? eg: 1、可以将容器中的目录和本机目录做映射。 2、达到修改本机目录文件就影响到容器中的文件。 1.本机创建实例文件夹 新建目录&#x…

图像拼接后丢失数据,转tiff报错rasterfile failed: an unknown

图像拼接后丢失数据 不仅是数据丢失了,还有个未知原因报错 部分数据存在值不存在的情况 原因 处理遥感数据很容易,磁盘爆满了 解决方案 清理一些无用数据,准备买个2T的外接硬盘用着了。 然后重新做处理

获取沪深300的所有个股列表

脚本: import requests from bs4 import BeautifulSoupurl "https://q.stock.sohu.com/cn/bk_4444.shtml" response requests.get(url) soup BeautifulSoup(response.text, "html.parser")# 找到包含class为e1的元素 elements soup.find_a…

计算机毕设 大数据房价预测分析与可视

文章目录 0 前言1 课题背景2 导入相关的数据 3 观察各项主要特征与房屋售价的关系4 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟…

战火使命攻略,高级回响怎么出现

《战火使命》中,高级回响材料是每个玩家追求的梦想,因为它们不仅能够提升角色的实力,还能让你在战场上独具风采。本战火使命攻略将详细介绍三种获取高级回响的方法,助你在游戏中更加强大! 关注【娱乐天梯】&#xff0c…

数据结构-图-基础知识

图 图的基本概念图的概念顶点和边有向图和无向图完全图有向完全图无向完全图 邻接顶点顶点的度路径和路径长度简单路径和回路子图生成树 连通图强连通图 图的存储结构邻接矩阵邻接表 图的遍历BFSDFS 图的基本概念 图的概念 🚀图是由顶点集合及顶点间关系组成的一种…

O(根号n/ln(根号n))时间复杂度内求n的所有因子

O()复杂度内求n的所有因子,在2e9数量级比O()快10倍左右 先用范围内的质数除n,求出n的分解质因数形式,然后爆搜求出n的所有因子, n范围内的质数大约有个,所以是这个时间…