首页 > 其他分享 >测试技能提升篇——一文理解消息中间件里那些通用的核心概念

测试技能提升篇——一文理解消息中间件里那些通用的核心概念

时间:2023-09-27 10:33:35浏览次数:40  
标签:订阅 一文 队列 topic 消息 消息中间件 服务器 技能


测试技能提升篇——一文理解消息中间件里那些通用的核心概念_消息中间件

我们测试同学在实际工作中或多或少都会接触过ActiveMQ、RabbitMQ,Kafka,和RocketMQ这类消息中间件产品,不同的公司会选择不同的产品,大家可能会觉得产品比较多,了解起来有些复杂!其实无论使用哪种中间件产品,他们的核心功能都是比较类似的。本文就不来汇总一下中间件产品的核心概念,给大家在实际工作中提供理论依据,帮助大家快速上手具体工作。

消息中间件和JMS概述

消息队列(消息中间件)已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如ActiveMQ、RabbitMQ,Kafka,和RocketMQ等。

JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,实际上是一套api,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,消息中间件是这个规范的一个具体实现,ActiveMQ就实现了JMS。

消息中间件的核心概念

我们在实际工作中无论使用哪种中间件:ActiveMQ、RabbitMQ或者Kafka,他们在某些功能的实现上会有所区别,但是下面总结的这些核心概念都是一致的,只要大家先理解了这些概念,再上手不同的中间件就都会有的放矢啦!

Message

消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输

Broker

消息中间件服务器,作为server提供消息核心服务

 Producer

消息生产者,业务的发起方,负责生产消息传输给broker,

Consumer

消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理

Topic

主题,发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播

 Queue

队列,点到点模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收

Destination

消息发送的目的地,上面说的queue和topic

 点对点模式

点对点模型是基于队列的,生产者发消息到队列,消费者从队列接收消息,队列的存在使得消息的异步传输成为可能,一个生产者对应一个消费者,当没有消费者可用时,这个消息会被保存直到有 一个可用的消费者,所以Queue实现了一个可靠的负载均衡。

测试技能提升篇——一文理解消息中间件里那些通用的核心概念_rabbitmq_02

 

发布/订阅模式

Pub/Sub发布订阅(广播):使用topic作为通信载体 ,topic可以被认为是消息的传输中介,发布者(publisher)发布消息到主题,订阅者(subscribe)从主题订阅消息。主题使得消息订阅者和消息发布者保持互相独立,不需要接触即可保证消息的传送。一个发布者可以对应多个订阅者,当发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到这个消息的拷贝。

测试技能提升篇——一文理解消息中间件里那些通用的核心概念_消息中间件_03

 消息持久化

通过消息持久化可以保证消息的可靠性。简单来说就是将数据存入磁盘,而不是存在内存中,这样会导致随服务器重启断开而消失。持久化带来的问题是性能低,写入硬盘要比写入内存性能较低很多,从而降低了消息中间件服务器的吞吐量。至于是否选择将消息进行持久化处理,要根据业务的实际情况自行判断。

消息高可用

当业务量增加请求也过大时,一台消息中间件服务器的会触及硬件(cpu、内存、磁盘)的极限,一台消息服务器已无法满足业务的需求,故消息中间件必须支持集群部署,来达到高可用的目的。

 

标签:订阅,一文,队列,topic,消息,消息中间件,服务器,技能
From: https://blog.51cto.com/liwen629/7621233

相关文章

  • 测试技能提升篇——Docker的核心概念
    Docker已经不是什么新技术了,相信绝大多数同学在实际工作中都会对其有一定的了解,使用一些常用的命令行执行一些操控容器的基础操作,这方便的网络资源实现太多了,在这里就不进行相关讲解了。本文重点介绍一下涉及Docker的相关概念以及其核心组件的作用,相信会帮助想要深入研究Docker的同......
  • 测试技能提升篇——脏读、不可重复读、幻读的区别
     脏读事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据不可重复读事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。脏读与不可重复读的区别在于前者读到的是其他事务未提交的数据,后者读到的......
  • 无限的技能
    无限的技能一、详情如果心中有目标,就能立即将新学到的技能付诸应用,课程开始正是草拟目标的大好时机。将想法记录下来是学习的好习惯,这样每当需要开始新项目时(大创,竞赛,毕业设计等)都可参考它们。如果你有无穷多种编程技能,密码技术,硬件设计技术,你打算开发什么样的密码系统或密码应......
  • Vue3 组件基础:轻松掌握前端开发新技能!
    基本实例这里有一个Vue组件的示例://创建一个Vue应用constapp=Vue.createApp({})//定义一个名为button-counter的新全局组件app.component('button-counter',{data(){return{count:0}},template:`<button@click="count++">......
  • NAS为什么不休眠?一文让你看懂硬盘休眠的门道
    网络附加存储(NAS)设备的硬盘休眠是一项重要的功能,可以节省能源并延长硬盘的使用寿命。然而,许多NAS用户都曾经遇到过一个令人烦恼的问题:为什么我的NAS硬盘总是不休眠?这个问题背后有着许多复杂的因素和门道。在本文中,我们将深入探讨导致NAS硬盘不休眠的各种可能原因,从硬件和软件配置......
  • 一文读懂分布式追踪的历史发展点滴
    【摘要】本文介绍了可观测生态领域相关的技术——DistributedTracing(分布式追踪)【作者】李杰,专注于Java虚拟机技术、云原生技术领域的探索与研究。什么是“DistributedTracing-分布式追踪”?DistributedTracing(分布式追踪)是一种用于监测和分析分布式应用程序的技术和方法......
  • 一文介绍清楚自定义表单开源的相关功能
    用什么样的软件平台可以让办公无压力,实现流程化发展?随着社会的进步发展,传统的办公工具已经不能满足办公需求了,需要借助低代码技术平台的优势特点,实现流程化办公。一款自定义表单开源工具,可以能让很多客户朋友完成高效率办公协作,顺利朝着数字化发展的方向迈进。什么样的服务商拥有......
  • 还不知道数据类岗位的相关技能和职责吗?涤生大数据告诉你(一)
    很多同学在求职中对数据类岗位傻傻分不清楚,投递简历的时候胡乱投递,本篇文章给大家讲讲数仓开发,etl开发,数据开发,数据治理工程师,BI工程师以及数据运维工程师这些数据类岗位的工作职责以及和数仓开发的区别。同时为了大家更加深入地了解各岗位的区别,也给大家讲解了一下这些岗位在日常......
  • immerjs:React开发必会技能
    immerjs:React开发必会技能龙骑士尹道长 ​关注 2人赞同了该文章我们都知道React追求的泛式是数据不可变,一般情况下state或者props改变才进入render阶段;如果我们创建的state是一个一般数据类型,他就是一个不可变的值,如果需要改变我们需要重新创建一个state......
  • 一文带你实现云上部署轻量化定制表单Docker
    本文分享自华为云社区 《【华为云云耀云服务器L实例评测|云原生】自定制轻量化表单Docker快速部署云耀云服务器|玩转华为云》,作者:计算机魔术师。华为云的云耀云服务器L实例备受推崇,以其高效、可靠和安全的基础设施服务而闻名。本文将为展示在该服务器上部署轻量化定制表单服务,......