JMS&AMQP 简介|学习笔记

简介: 快速学习 JMS&AMQP 简介

开发者学堂课程【SpringBoot 快速掌握 - 高级应用JMS&AMQP 简介】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/613/detail/9298


JMS&AMQP 简介

内容介绍:

一、概述

二、举例说明


一、概述

1、大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力

2.消息服务中两个重要概念

消息代理(message broker)和目的地(destination)。消息代理是消息中间件的服务器,给消息队列存取内容,就要连接服务器。消息发送者将消息发送到消息代理也就是发送到服务器,服务器接管到消息后要把消息传递给指定目的地。

3.消息队列目的地形式

队列(queue):点对点消息通信(point-to-point)

点对点式:消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后被移出队列。消息只有唯一的发送者和接受者,但并不是说只能有一个接收者

主题(topic):发布(publish)/订阅(subscribe)消息通信

发布订阅式:发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题,那么就会在消息到达时同时收到消息

4、消息代理规范

JMS (Java Message Service) JAVA 消息服务:基于JVM消息代理的规范。ActiveMQ、HornetMQ 是 JMS 实现

AMQP (Advanced Message Queuing Protocol)高级消息队列协议,也是一个消息代理的规范,兼容 JMS。RabbitMQ 是 AMQP 的实现

两者区别


JMS

AMQP

定义

Java api

网络线级协议

跨语言

跨平台

Model

提供两种消息模型:

(1)peer-2-peer

(2)pub/sub

提供了五种消息模型:

(1)direct exchange

(2)fanout exchang

(3)topic change

(4)headers exchange

(5)system exchange

本质上来讲,后四种和JMS 的 pub/sub 模型没有太大差别,仅是在路由机制上做了更详细的划分;

支持消息类型

多种消息类型:

lextMessage

MapMessage

BytesMessage

StreamMessage

ObjectMESSAGE

Message(只有消息头和属性)

bytel

当实际应用时,有复杂的消息,可以将消息序列化后发送

综合评价

JMS 定义了 JAVAAPI层面的标准;在 java 体系中,多个 client

均可以通过 MS 进行交互,不需要应用修改代码,但是其对跨平台的支持较差; 

AMQP 定义了 wrie-level层的协议标准;天然具有跨平台、跨语言特性。

5. Spring 支持

spring-jms 提供了对 JMS 的支持。

spring-rabbit 提供了对 AMQP 的支持。

需要 ConnectionFactory 的实现来连接消息代理。

提供 JmsTemplate、RabbitTemplate 来发送消息。

@JmsListener (JMs)、@RabbitListener (AMQP)注解在方法上监听消息代理发布的消息。

EnableJms、@EnableRabbit 开启支持。

6. Spring Boot 自动配置

JmsAutoConfiguration

RabbitAutoConfiguration


二、举例说明

1、异步处理

image.png

异步处理示意图

以某个用户注册为例,用户注册成功以后,我们将他的注册信息写进数据库,同时还想给他发一封邮件和一条短信。

首先我们采用同步调用的方法,写完数据库后去调发邮件,再去调发短信,每次调用需要50毫秒,共需150毫秒去响应给用户,这个过程十分漫长。第二种模式是用户注册信息写进数据库花费50毫秒,通过多线程的方式,并发执行两个操作,第一个操作用来发送注册邮件,第二个操作用来发送短信。

由于是并发,相当于只花了一个最长的时间来完成两个操作,共需100毫秒去响应给用户,而这还不是最优方案。此时引入消息队列,这样用户将注册好的信息写进数据库以后,只需将相关信息很快的写进消息队列,一旦写入了消息队列立马返回,用户即可在60毫秒内即可得到响应。

2、应用解耦

image.png

应用解耦示意图

例如将订单系统与库存系统写在一个应用里耦合起来,下完单后我们需要减库存,则在下完单后就需要去调取减少库存的方法,这样的操作很麻烦并且耗时很久。若将订单系统和库存系统单独抽取出来,当我们下单时,下单的信息就会写进我们消息队列里,库存系统通过订阅消息队列里的内容,进行计算库存相关的操作,可以提供效率。

3、流量削峰

image.png

流量削峰特别适用于秒杀,比如有10万个人抢购1万个商品,每个人都发送一个请求进来,处理起来十分麻烦而且会导致卡顿。

如果用户的秒杀请求进来后直接进入消息队列,并将消息队列设置定成为1万个,即它只能存储1万个数据,10万个用户中只有前1万个可以进入,后边的9万个用户无法进入消息队列,只要进不了队列立马抛弃请求,响应显示为秒杀失败。

相关文章
|
存储 安全 数据挖掘
带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(1)
带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(1)
640 1
|
Prometheus 监控 Kubernetes
免费的集群管理软件有哪些?5款主流推荐
集群管理是对多台服务器或计算节点进行协调、调度和维护的过程,核心在于资源分配、负载均衡、监控和故障恢复。常见的集群管理软件包括板栗看板、Kubernetes Dashboard、Zabbix、Prometheus + Grafana 和 Nagios Core。这些软件各有特色,适用于不同的需求场景,如项目管理、容器编排、实时监控等。选择合适的集群管理工具,可以提升团队效率,降低运营成本,确保系统稳定运行。
3302 4
|
人工智能 供应链 搜索推荐
企业CRM选型必看:2024年最佳CRM系统排行
企业用户在选择CRM系统时,不仅要考虑系统的功能性、可定制性,还要考虑其与现有工具的集成能力以及价格。此外,在2024年,越来越多的企业用户会把CRM厂商的AI能力列入考察范畴。 本文分析整理2024年最佳CRM系统排行榜,从系统功能、优势、适用企业类型等方面,为企业用户选型客户关系管理系统提供参考。
|
机器学习/深度学习 算法
贝叶斯线性回归:概率与预测建模的融合
本文探讨了贝叶斯方法在线性回归中的应用,从不确定性角度出发,介绍了如何通过概率来表达变量间关系的不确定性。文章首先回顾了古希腊天文学家使用本轮系统模拟行星运动的历史,并将其与傅里叶级数分解方法类比,强调了近似的重要性。接着,通过高斯分布和贝叶斯推断,详细讲解了线性回归中的不确定性处理方法。文章使用Howell1数据集,展示了如何构建和拟合高斯模型,并通过先验预测模拟验证模型合理性。最后,介绍了多项式回归和样条方法,展示了如何逐步增加模型复杂性以捕捉更细微的数据模式。贝叶斯方法不仅提供了点估计,还提供了完整的后验分布,使得模型更具解释性和鲁棒性。
421 1
贝叶斯线性回归:概率与预测建模的融合
|
XML Java 数据格式
Spring介绍
【10月更文挑战第9天】
|
数据采集 存储 自然语言处理
快速构建企业智能门户,销售额倍增,人才触手可及 - 爬虫 + RAG + LLM
本文介绍了一款基于大模型的智能企业门户接待系统,旨在通过先进的AI技术,实现企业网站信息的自动化处理与响应,提高客户支持、产品推荐和人才招聘的效率。系统利用爬虫技术自动提取公司官网信息,结合语音识别、大模型生成等技术,支持语音和文本输入,通过RAG(检索增强生成)方式生成精准回答,并支持语音播报,提供类似真人的接待体验。项目涵盖了环境准备、数据构建、代码实现、测试调优、部署等多个阶段,详细记录了开发过程中遇到的问题及解决方案,展示了系统在咨询公司信息、产品询问及招聘岗位咨询等场景下的应用潜力。未来计划在数据类型支持、会话记忆、并发处理、语音合成等方面进一步优化,以提升用户体验和服务质量。
355 0
uniapp轮播图高度随变和左右滑动也获取高度
uniapp轮播图高度随变和左右滑动也获取高度
|
Arthas fastjson Java
使用arthas+mat排查故障
使用arthas+mat排查故障
244 1
|
存储 关系型数据库 Serverless
怎样实现跨微服务的数据查询?
怎样实现跨微服务的数据查询?
803 1
怎样实现跨微服务的数据查询?
|
存储 缓存 自然语言处理
揭秘百度IM消息中台的全量用户消息推送技术改造实践
本文介绍了百度现有IM消息中台系统的主要组成,并对比多种实现方案的优劣,以“公有信箱”通知读扩散的技术方案对现有IM消息中台系统进行改造,从而达成了低成本、高时效地实现全量用户通知推送需求。
466 0