消息中间件(一)

news2024/9/21 12:43:03

文章目录

    • 消息中间件
      • 什么是中间件?
      • 为什么使用MQ?
      • 应用场景?
    • JMS和AMQP
      • JMS
      • AMQP
      • JMS和AMQP的区别
    • 消息队列产品

消息中间件

什么是中间件?

MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。
中间件是为应用程序提供操作系统所提供服务之外的服务,简化应用程序的通信、输入输出的开发,使他们专注于自己的业务逻辑。

为什么使用MQ?

在项目中,可以将一些不需要即时处理且耗时的操作提取出来,进行异步处理
这样的操作大大减少了服务器的请求响应时间,从而提高了系统的吞吐量

应用场景?

适用于需要使用可靠的数据传送的分布式环境。

  • 采用消息中间件机制的系统中,不同对象之间通过传递消息来完成对对方事件的激活,完成相应的操作。发送者将消息发送到消息服务器中,消息服务器将消息存放在若干队列中,在合适的时候再将消息发送给接收者。
  • 消息中间件能在不同平台之间进行通信,常用来屏蔽平台或协议之间的特性,从而实现应用之间的协同。其优点在于能够在客户和服务器之间提供异步或是同步的连接,并且可以在任何时刻完成对消息进行传送或者存储、转发,这也是比远程过程调用更近一步的点。

在开发中消息队列的作用

  • 任务【异步处理】
    将不需要同步处理且耗时长的操作由消息队列通知给消息接收方进行异步操作。
    提高了应用程序的响应时间。
  • 应用程序【解耦合】
    MQ相当于一个中介,生产方通过MQ与消费方进行交互,它将应用程序进行
  • 【削峰填谷】
    如订单系统,在下单的时候会有很大的数据需要写入数据库。假设数据库只能承受每秒1000的写入量,并发量超过1000数据库就会宕机。当低峰期的时候并发量只有不到100,但到高峰期却会激增至5000以上,这个时候数据库一定会崩坏。
    在这里插入图片描述
    但如果在用户和订单系统之间加入一个mq,消息被保存在mq中,请求高峰时压力不会直接给到订单系统而是由mq缓存一下。比如每秒1000个数据,这样慢慢写入数据库,这样就不会卡死数据库了。
    在这里插入图片描述
    使用了MQ之后,限制消费消息的速度为1000,但是这样一来,高峰期产生的数据势必会被积压在MQ中,高峰就被“削”掉了。但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000QPS,直到消费完积压的消息,这就叫做“填谷”。

JMS和AMQP

消息队列有两种通信方式:分别为JMS和AMQP

JMS

JMS,Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

AMQP

AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议)。这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式

JMS和AMQP的区别

JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
JMS规定了两种消息模式;而AMQP的消息模式更加丰富

消息队列产品

市场上常见的消息队列有如下:

  • ActiveMQ:基于JMS
  • ZeroMQ:基于C语言开发
  • RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
  • RocketMQ:基于JMS,阿里巴巴产品
  • Kafka:类似MQ的产品;分布式消息系统,高吞吐量

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

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

相关文章

大模型优化:RAG还是微调?

引言 随着人们对大型语言模型 (LLM) 的兴趣激增,许多开发人员和组织正忙于利用其能力构建应用程序。然而,当开箱即用的预训练LLM没有按预期或希望执行时,如何提高LLM申请的性能的问题。最终我们会问自己:我们应该使用检索增强生成…

Vue中如何实现城市3D分布图

cityfenbu.vue <template><div ><el-card class"seriesmap-box-card"><div slot"header" class"clearfix"><span>城市分布图 (点击可下钻到县)</span></div><div><div class"series-ma…

不出意外的话,2023年是AI大模型元年

这两天听的最多的新闻莫过于&#xff0c;谁谁谁&#xff08;AI 大模型&#xff09;面向全社会开放使用&#xff0c;文心一言、WPSAI、讯飞星火、百川智能等等&#xff0c;2023年&#xff0c;AI大模型注定在历史上增添了浓妆淡抹的一幕&#xff0c;未来 AI 将与各个软件应用如影…

RPC协议交互流程

文章目录 RPC特性RPC实现RPC交互流程RPC交互时序图RPC交互流程 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09; 是一种分布式计算的通信协议和编程模型&#xff0c;用于不同计算机或进程之间进行远程通信。它允许一个计算机程序&#xff08;通常是…

TOWE新能源电动汽车充电延长线,解决户外充电距离过短烦恼

随着新能源汽车市场的日益繁荣&#xff0c;越来越多的车主开始关注充电设备的便利性。为了满足广大车主的充电需求&#xff0c;同为科技&#xff08;TOWE&#xff09;荣誉推出全新16A三芯大功率新能源电动汽车充电延长电源线。这款产品采用优质材料&#xff0c;结构合理&#x…

@Value,@Autowired,@Qualifier

Value 当属性的类型是简单类型时&#xff0c;可以使用Value注解进行注入。 package com.powernode.spring6.bean4;import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;Component public class User {Value(value …

NASM编译器之下载安装使用

NASM的下载和安装 每种处理器都可能会有自己的汇编语言编译器&#xff0c;而对于同一款处理器来说&#xff0c;针对不同的平台(比如Windows和Linux&#xff09;&#xff0c;也会有不同版本的汇编语言编译器。 现存的汇编语言编译器有多种&#xff0c;用得比较多的有 MASM、FA…

如何加快跨国传输大文件的速度?

在当今的信息化社会&#xff0c;数据已经成为各行各业的重要资产&#xff0c;而数据的传输和交换则是数据价值的体现。在很多场景中&#xff0c;我们需要跨国传输大文件&#xff0c;比如政府、军队、金融、医疗等涉密行业&#xff0c;或者跨国、跨区域的企业合作。然而&#xf…

浅谈安科瑞ADL400系列导轨电能表在沙特电力物联网平台中的应用

1.项目概述&#xff1a;Project Overview 沙特客户需要对小区住宅&#xff0c;及商铺进行用户端电能计量&#xff0c;管理。需要安装三相交流电表监测电能数据&#xff0c;并上传到后台系统进行统一监控管理。安科瑞推荐电力物联网平台&#xff0c;可以通过云端界面和APP查看不…

Python中文字体包下载经历(经验分享)

故事背景 python解释器需要中文字体包&#xff0c;我找了半天网络上的中文字体包&#xff0c;每一个过程都非常繁琐。 都是先注册&#xff0c;在安装他们的软件&#xff0c;软件安装好后下载&#xff0c;下载的还不是字体包格式的文件&#xff0c;反正就是在欺负小白。 解决…

浅谈能源汽车下乡充电桩建设优化建议及解决方案

1.趋势分析 新能源汽车下乡已经成为提振汽车市场表现、推动汽车行业发展的重要措施。国家发改委日前也提出&#xff0c;汽车消费是支撑消费的“大头”&#xff0c;将加快推进充电桩和城市停车设施建设&#xff0c;大力推动新能源汽车下乡&#xff0c;鼓励汽车企业开发更适宜县…

若依集成mybatisplus、兼容旧分页【亲测有效】

这里写目录标题 一 修改pom文件最外层的pom.xml增加如下配置common模块的pom文件加入如下配置 二 framework模块的config包增加两个类MybatisPlusPageConfigurerSqlFilterArgumentResolver 三 全局搜索com.ruoyi.framework.config.MyBatisConfig类&#xff0c;将此类注释掉四 y…

excel表中复制粘贴有隐藏行的情况

一、原始数据&#xff0c;没有任何隐藏的情况&#xff1a; 二、隐藏3、4行&#xff1a; 这种情况下&#xff1a; 三、我想复制粘贴出可见的内容&#xff0c;全选&#xff0c;ctrlc复制 四、ctrlv粘贴到别处&#xff0c;结果却是 发现隐藏的行也被复制粘贴出来了。并不是我们想…

求求你,别再用 Mybatis Plus 的伪批量新增了!

前言 大家好&#xff0c;我是小哈~ 本文节选自小哈写的《Mybatis Plus 教程》中的批量新增一节&#xff0c;旨在帮助大家如何在 Mybatis Plus 中&#xff0c;实现 MySQL 真实的批量新增&#xff0c;而不是伪批量新增。 最近&#xff0c;小哈在带小伙伴做 前后端分离项目&#x…

2023年MySQL-8.0.34保姆级安装教程

重点放前面&#xff1a;演示环境为windows环境。 MySQL社区版本安装教程如下&#xff1a; 一、MySQL安装包下载二、安装配置设置三、配置环境变量 大体分为3个步骤&#xff1a;①安装包的下载&#xff1b;②安装配置设置&#xff1b;③配置环境变量 一、MySQL安装包下载 下载官…

界面长的像算抄袭吗?

昨晚&#xff0c;在GitHub和X上&#xff0c;被一次疑似抄袭的问题刷了一会儿屏&#xff0c;主要是下面这个issue&#xff1a; 相关的开源项目是小米的米效&#xff0c;英文名&#xff1a;Mone。一个以微服务为中心的一站式企业协同研发平台。支持公有云、私有云、混合云等多种部…

Redis Cluster集群运维与核心原理剖析

Redis集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会做主从切换&#xff0c;将某一台slave作为master&#xff0c;哨兵的配置略微复杂&#xff0c;并且性能和高可用性…

2023/09/07 c++qt day2

#include <iostream>using namespace std; //封装一个学生类 struct stu { private://存放学生的成绩int stu_score[256];//记录学生个数int stu_num; public://用于设置学生个数void setNum(){cout<<"请输入学生的个数"<<" ";cin>&g…

神策数据发布汽车行业 CJO 解决方案,打造客户旅程全新体验

最近&#xff0c;围绕数字化客户经营&#xff0c;神策数据基于“客户旅程编排&#xff08;Customer Journey Orchestration&#xff0c;简称 CJO&#xff09;”理念&#xff0c;发布汽车行业全新解决方案&#xff0c;通过全渠道打通给客户带来一致的、个性化的体验&#xff0c;…

如何做好自己的职业规划

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 进入公司以后&#xff0c;就是进入了人生的下一个阶段&#xff0c;通过前面几个章节&#xff0c;我们谈到了入职新公司后应该如何开展工作。这节我们来聊一聊如何做好职业规…