一、ActiveMQ介绍

ActiveMQ介绍

  • 一、JMS
    • 1.jms介绍
    • 2.jms消息传递模式
    • 3.JMS编码总体架构
  • 二、消息中间件
  • 三、ActiveMQ介绍
    • 1.引入的原因
      • 1.1 原因
      • 1.2 遇到的问题
      • 1.3 解决思路
    • 2.定义
    • 3.特点
      • 3.1 异步处理
      • 3.2 应用系统之间解耦
      • 3.3 实际-整体架构
    • 4.作用

一、JMS

1.jms介绍

  • jms是java消息服务接口规范,主要包含四大元素:生产者、消费者、消息、消息服务。
    • 生产者:创建消息,并把消息发动到消息服务;
    • 消费者:从消息服务接收消息;
    • 消息服务:即MQ消息服务(broker),而生产者与消费者相对其均为客服端;
    • 消息:整个消息服务的传输对象,消息包含消息头、消息属性、消息体;

常用消息头属性:JMSDestination(消息目的地,如果生产者指定了目的地,在发送时会改为生产者绑定的目的地)、JMSDeliveryMode(是持久还是非持久)、JMSExpiration(过期时间,默认永久)、JMSPriority(优先级,0-9,数值越大优先级越高,默认为4)、JMSMessageId(唯一的消息ID);
消息属性:可视为消息头属性的扩展,通过setXxxProperty(k,v)设置;
消息体:封装消息的具体数据,发送与接收的消息体类型必须一致,消息体类型总共有5种,TextMessage、Mapmessage、BytesMessage、StreamMessage、ObjectMessage;

2.jms消息传递模式

  • jms消息传递模式有如下两种,
    • 点对点消息传递模式(P2P):消息发送到一个特殊队列(queue), 消费者从队列获取消息,一条消息只能被只能被一个消费者消费;
    • 发布/订阅消息传递模式(publish-subscribe):消息被发送到一个主题上(topic),所有订阅了该主题的消费者,都能接收到消息。

3.JMS编码总体架构

  • JMS应用程序由如下基本模块组成
    • 1.连接工厂对象,创建消息客户端(生产者、消费者)与消息服务端的连接(connection);
    • 2.连接对象,创建回话对象(session);
    • 3.会话对象,创建生产者对象(producer)、消费者对象(consumer)以及消息对象(message);
    • 4.目的地(queue/topic),点对点模式下目的地是队列(queue),发布/订阅模式下目的地是主题(topic),生产者把消息发送到目的地,消费者从目的地接收消息
      在这里插入图片描述

Destination-目的地

  • 总共有两大模式
    • 队列(Queue):队列是一种一对一的消息传递模式。在队列中,消息发送方(生产者)将消息发送到队列中,然后消息接收方(消费者)从队列中接收并处理消息。每条消息只会被一个消费者接收和处理,确保了消息的顺序性和唯一性。
    • 主题(Topic):主题是一种一对多的消息传递模式。在主题中,消息发送方(生产者)将消息发送到主题中,然后所有订阅该主题的消息接收方(消费者)都会收到该消息。每个消费者都可以独立地接收和处理消息,消息的传递是广播式的,可以实现发布-订阅模式。(类似公众号,N个人订阅,就有N个人收到消息)。

二、消息中间件

  • 消息中间件是实现了jms规范的落地产品,目前市场上主流的消息中间件有 ActiveMQ、Kafka、RocketMQ、RabbitMQ等。企业开发中使用消息中间件的主要目的是 解决耦合调用、抵御洪峰流量(削峰)等。 以下主要讲解ActiveMQ的使用。

三、ActiveMQ介绍

  • 官网地址

1.引入的原因

1.1 原因

  • 微服务架构后,链式调用是我们在写程序时候的一般流程,为了完成一个整体功能会将其拆分成多个函数(或子模块),比如模块A调用模块B,模块B调用模块C,模块C调用模块D。但在大型分布式应用中,系统间的RPC交互繁杂,一个功能背后要调用上百个接口并非不可能,从单机架构过渡到分布式微服务架构的通例

1.2 遇到的问题

  • 系统之间接口耦合严重
    • 举个例子:如果系统A要发送数据给系统B和系统C,发送给每个系统的数据可能有差异,因此系统A对要发送给每个系统的数据进行了组装,然后逐一发送;
    • 当代码上线后又新增了一个需求:把数据也发送给D,新上了一个D系统也要接受A系统的数据,此时就需要修改A系统,让他感知到D系统的存在,同时把数据处理好再给D。在这个过程你会看到,每接入一个下游系统,都要对系统A进行代码改造,开发联调的效率很低。
  • 面对大流量并发时,容易被冲垮
    • 每个接口模块的吞吐能力是有限的,这个上限能力如果是堤坝,当大流量(洪水)来临时,容易被冲垮。
    • 举个例子秒杀业务:上游系统发起下单购买操作,我就是下单一个操作下游系统完成秒杀业务逻辑(读取订单,库存检查,库存冻结,余额检查,余额冻结,订单生产,余额扣减,库存减少,生成流水,余额解冻,库存解冻)
  • 等待同步存在性能问题
    • RPC接口上基本都是同步调用,整体的服务性能遵循“木桶理论”,即整体系统的耗时取决于链路中最慢的那个接口。比如A调用B/C/D都是50ms,但此时B又调用了B1,花费2000ms,那么直接就拖累了整个服务性能。

1.3 解决思路

  • 解耦:要做到系统解耦,当新的模块接进来时,可以做到代码改动最小;
  • 削峰:设置流量缓冲池,可以让后端系统按照自身吞吐能力进行消费,不被冲垮;
  • 异步:强弱依赖梳理能将非关键调用链路的操作异步化并提升整体系统的吞吐能力;

2.定义

  • 面向消息的中间件(message-oriented middleware)MOM能够很好的解决以上问题,是指利用高效可靠的消息传递机制与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
  • 通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储、流量削峰,异步通信,数据同步等功能。
    • 发送者把消息发送给消息服务器,消息服务器将消息存放在若干队列/主题topic中,在合适的时候,消息服务器回将消息转发给接受者。在这个过程中,发送和接收是异步的,也就是发送无需等待,而且发送者和接受者的生命周期也没有必然的关系;
    • 尤其在发布pub/订阅sub模式下,也可以完成一对多的通信,即让一个消息有多个接受者。
  • ActiveMQ 是 Apache 推出的一款 开源免费的,完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现的消息中间件(Message Oriented Middleware,MOM)

3.特点

3.1 异步处理

  • 消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或者队列)上;
  • 消息接收者则订阅或者监听该爱通道。一条消息可能最终转发给一个或者多个消息接收者,这些消息接收者都无需对消息发送者做出同步回应。整个过程都是异步的。
    在这里插入图片描述
  • 这样的一种通信方式,就是所谓的“异步”通信方式,对于系统A来说,只需要把消息发送给MQ,然后系统B就会异步的去进行处理了,系统A不需要“同步”的等待系统B处理完成。
    • 这样的好处是 解耦

3.2 应用系统之间解耦

  • 发送者和接收者不必了解对方,只需要确认消息
  • 发送者和接收者不必同时在线

3.3 实际-整体架构

在这里插入图片描述

4.作用

  • 解耦
  • 削峰
  • 异步

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android安卓架构MVC、MVP、MVVM模式的概念与区别

目录 MVC框架 MVP框架 MVVM框架 MVVM与MVP区别 MVVM与MVC区别 MVC、MVP、MVVM模式哪个要好一些 MVC(Model-View-Controller)、MVP(Model-View-Presenter)、MVVM(Model-View-ViewModel)是三种常见的软…

Flume(二)【Flume 进阶使用】

前言 学数仓的时候发现 flume 落了一点,赶紧补齐。 1、Flume 事务 Source 在往 Channel 发送数据之前会开启一个 Put 事务: doPut:将批量数据写入临时缓冲区 putList(当 source 中的数据达到 batchsize 或者 超过特定的时间就会…

元器件焊盘的PCB处理方式分析与总结

对于高速信号走线的特性阻抗,都需要按照实际要求进行精度控制,所以,任何因设计因素带来的阻抗波动都应该进行优化,如下图所示,为一个12层板设计中的50Ω微带走线,需要在走线之上放置电感; 但是&…

N-144基于微信小程序在线订餐系统

开发工具:IDEA、微信小程序 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术:vue、ElementUI、 Vant Weapp 服务端技术:springbootmybatisredis 本系统分微信小程序和…

Sora时代,我们的AI应该何去何从?——关于Sora大模型的思考

Sora时代,我们的AI应该何去何从?——关于Sora大模型的思考 一、Sora大模型:横空出世,让AI生成所有领域瑟瑟发抖二、Sora的出现代表了相关行业的灭亡?三、我们将何去何从? 一、Sora大模型:横空出世&#xf…

【数据结构】二叉查找树和平衡二叉树,以及二者的区别

目录 1、二叉查找树 1.1、定义 1.2、查找二叉树的优点 1.2、查找二叉树的弊端 2、平衡二叉树 2.1、定义 2.2、 实现树结构平衡的方法(旋转机制) 2.2.1、左旋 2.2.2、右旋 3、总结 1、二叉查找树 二叉查找树又名二叉排序树,亦称二叉搜…

WebStorm | 如何修改webstorm中新建html文件默认生成模板中title的初始值

在近期的JS的学习中&#xff0c;使用webstorm&#xff0c;总是要先新建一个html文件&#xff0c;然后再到里面书写<script>标签&#xff0c;真是麻烦&#xff0c;而且标题也是默认的title&#xff0c;想改成文件名还总是需要手动去改 经过小小的研究&#xff0c;找到了修…

阅读笔记(BMSB 2018)Video Stitching Based on Optical Flow

参考文献 Xie C, Zhang X, Yang H, et al. Video Stitching Based on Optical Flow[C]//2018 IEEE International Symposium on Broadband Multimedia Systems and Broadcasting (BMSB). IEEE, 2018: 1-5. 摘要 视频拼接在计算机视觉中仍然是一个具有挑战性的问题&#xff0…

软件工程师,为什么不喜欢关电脑

概述 你是否注意到&#xff0c;软件工程师们似乎从不关电脑&#xff0c;也不喜欢关电脑&#xff1f;别以为他们是电脑“上瘾”&#xff0c;或是沉迷于电脑&#xff0c;这一现象背后蕴含着多种实际原因。 1、代码保存与恢复。 在编写代码过程中&#xff0c;遇到问题时可能会暂时…

【打工日常】使用docker部署Dashdot工具箱

一、Dashdot介绍 dashdot是一个简洁清晰的服务器数据仪表板&#xff0c;基于React实现 &#xff0c;主要是显示操作系统、进程、存储、内存、网络这五个的数据。 二、本次实践介绍 1. 本次实践简介 本次实践部署环境为个人测试环境 2. 本地环境规划 本次实践环境规划&#xf…

【leetcode】深搜、暴搜、回溯、剪枝(C++)3

深搜、暴搜、回溯、剪枝&#xff08;C&#xff09;3 一、解数独1、题目描述2、代码3、解析 二、单词搜索1、题目描述2、代码3、解析 三、黄金矿工1、题目描述2、代码3、解析 四、不同路径III1、题目描述2、代码3、解析 一、解数独 1、题目描述 leetcode链接 2、代码 class…

机器学习西瓜书之决策树

目录 算法原理剪枝处理连续值处理缺失值处理多变量决策树 算法原理 从逻辑角度&#xff1a;通过一系列if-else语句进行多重判断&#xff0c;比如白富美的判断条件&#xff08;“白”“富”“美”&#xff09;。 从几何角度&#xff1a;根据定义的标准进行样本空间的划分。 以二…

如何在CSS中实现背景图片的渐变?

--引言 在CSS中&#xff0c;实现背景图片的渐变通常需要使用linear-gradient或者radial-gradient函数&#xff0c;这些函数可以与背景图像一起使用来创建渐变效果。然而&#xff0c;CSS的渐变并不直接支持使用图像作为渐变的颜色停止点。但你可以通过一些技巧来实现类似的效果…

每日一题 429.N叉树的层序遍历

429. N 叉树的层序遍历 描述&#xff1a; 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;。 树的序列化输入是用层序遍历&#xff0c;每组子节点都由 null 值分隔&#xff08;参见示例&#xff09;。 示例 1…

谷歌新动作:双子模型大放送,开发者福音来了!

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

SQL29 计算用户的平均次日留存率(lead函数的用法)

代码 with t1 as(select distinct device_id,date --去重防止单日多次答题的情况from question_practice_detail ) select avg(if(datediff(date2,date1)1,1,0)) as avg_ret from (selectdistinct device_id,date as date1,lead(date) over(partition by device_id order by d…

神经网络学习小记录78——Keras CA(Coordinate attention)注意力机制的解析与代码详解

神经网络学习小记录78——Keras CA&#xff08;Coordinate attention&#xff09;注意力机制的解析与代码详解 学习前言代码下载CA注意力机制的概念与实现注意力机制的应用 学习前言 CA注意力机制是最近提出的一种注意力机制&#xff0c;全面关注特征层的空间信息和通道信息。…

走近 Next.js:全栈框架的简介与应用

微信搜索“好朋友乐平”关注公众号。 1. Next.js Next.js 是一个使用 React 构建单页应用程序&#xff08;SPA&#xff09;的开源 JavaScript 框架。它使得构建服务端渲染&#xff08;SSR&#xff09;和静态网站生成&#xff08;SSG&#xff09;的 React 应用程序变得简单和高…

安全基础~通用漏洞5

文章目录 知识补充CSRFSSRFxss与csrf结合创建管理员账号 知识补充 NAT&#xff1a;网络地址转换&#xff0c;可以将IP数据报文头中的IP地址转换为另一个IP地址&#xff0c;并通过转换端口号达到地址重用的目的。即通过将一个外部IP地址和端口映射更大的内部IP地址集来转换IP地…

人工智能学习与实训笔记(七):神经网络之模型压缩与知识蒸馏

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 本篇目录 七、模型压缩与知识蒸馏 7.1 模型压缩 7.2 知识蒸馏 7.2.1 知识蒸馏的原理 7.2.2 知识蒸馏的种类 7.2.3 知识蒸馏的作用 七、模型压缩与知识蒸馏 出于对响应速度&#xff0c;存储大小和能…