系列一、MQ简介

一、MQ简介

1.1、概述

        MQ(Message Queue),是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息(消息即数据,一般消息的体量不会很大生产、存储、消费全过程的API软件系统。

1.2、应用场景

        MQ常用的应用场景主要分为以下三种,即:流量削峰、异步解耦、数据搜集,下面一 一介绍。

1.2.1、流量削峰

        MQ可以将系统的超量请求暂存其中,以便系统后期可以慢慢进行处理,从而避免了请求的丢失或系统被压垮。

1.2.2、异步解耦

        上游系统对下游系统的调用若为同步调用,则会大大地降低系统的吞吐量与并发度,且系统耦合度较高,而异步调用则会解决这些问题。所以两层之间若要实现由同步到异步的转化,一般性做法就是,在这两层之间添加一个MQ层。

1.2.3、数据搜集

        分布式系统会产生海量级数据流,例如:业务日志、监控数据、用户行为等。针对这些数据流进行实时或者批量采集汇总,然后对这些数据流进行大数据分析,是当前互联网平台的必备技术。通过MQ完成此类数据搜集是最好的选择。

1.3、常见的MQ产品

(一)、ActiveMQ

        ActiveMQ是使用Java语言开发的一款MQ产品。早期很多公司与项目中都在使用,但是现在的社区活跃度已经很低了,现在的项目中也已经很少使用了。

(二)、RabbitMQ

        RabbitMQ是使用ErLang语言开发的一款MQ产品。其吞吐量较Kafka和RocketMQ要低,且由于其不是Java语言开发,所以公司内部对其实现定制化开发难度较大。

(三)、RocketMQ

        RocketMQ是使用Java语言开发的一款MQ产品。经过数年阿里巴巴双11的考验,性能与稳定性非常高,其没有遵循任何常见的MQ协议,而是使用自研协议。对于Spring Cloud          Alibaba,其支持RabbitMQ、Kafka,但建议使用RocketMQ。

(四)、Kafka

        Kafka是使用Scala/Java语言开发的一款MQ产品。其最大的特点就是高吞吐量,常用于大数据领域的实时计算、日志采集等场景,其没有遵循任何常见的MQ协议,而是使用自研协议。

1.4、ActiveMQ vs RabbitMQ vs RocketMQ vs Kafka

1.5、MQ常见协议

1.5.1、概述

        般情况下MQ的实现都要遵循一些常规性协议,常见的协议如下:

1.5.2、各种协议

(一)、JMS

        JMS(Java Message Service:Java消息服务),是Java平台上有关MOM(Message Oriented Middleware:面向消息的中间件)的技术规范,它便于系统中的Java应用程序进行消息交换,并且提供标准的生产、发送、接收消息的接口,简化企业应用的开发。ActiveMQ是该协议的典型实现。

(二)、STOMP

         STOMP(Streaming Text Oriented Message Protocol:面向流文本的消息协议),是一种MOM设计的简单文本协议。STOMP提供一个可互操作的连接格式,允许客户端与任意STOMP消息代理(Broker)进行交互。ActiveMQ是该协议的典型实现,RabbitMQ通过插件可以支持该协议。

(三)、AMQP

        AMQP(Advanced Message Queuing Protocol:高级消息队列协议),一个提供统一消息服务的应用层标准,是应用层协议的一个开放标准,是一种MOM设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品、不同开发语言的限制。RabbitMQ是该协议的典型实现。

(四)、MQTT

        MQTT(Message Queuing Telemetry Transport:消息队列遥测传输),是IBM公司开发的一个即时通讯协议,是一种二进制协议,主要用于服务器和低功耗IoT(物联网)设备间的通信。该协议支持所有平台,几乎可以把所有物联网物品和外部连接起来,被用来当做传感器和制动器的通信协议。RabbitMQ通过插件可以支持该协议。

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

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

相关文章

第11章 GUI Page421~422 步骤六 支持文字

运行效果: 关键代码: 新增头文件: //item_text.hpp #ifndef ITEM_TEXT_HPP_INCLUDED #define ITEM_TEXT_HPP_INCLUDED #include "item_i.hpp"class TextItem : public IItem { public:TextItem(): _startPosition(0, 0), _endPos…

shardingjdbc增加动态数据源(用于解决其不支持的SQL等)

1.配置文件 spring: #动态数据源引入dynamic:strict: truedatasource:ds:driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourceurl: ${secret.datasource.url}username: ${secret.datasource.username}password: ${secret.datasource.pa…

百马百担c语言编程

以下是一个百马百担问题的C语言编程实现&#xff1a; #include <stdio.h>int main() {int n, m, k;scanf("%d%d%d", &n, &m, &k);int a[n], b[m];for (int i 0; i < n; i) {scanf("%d", &a[i]);}for (int i 0; i < m; i) {…

记录每日LeetCode 1962.移除石子使总数最小 Java实现

题目描述&#xff1a; 给你一个整数数组 piles &#xff0c;数组 下标从 0 开始 &#xff0c;其中 piles[i] 表示第 i 堆石子中的石子数量。另给你一个整数 k &#xff0c;请你执行下述操作 恰好 k 次&#xff1a; 选出任一石子堆 piles[i] &#xff0c;并从中 移除 floor(pile…

【华为鸿蒙系统学习】- 如何利用鸿蒙系统进行App项目开发|自学篇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 创建鸿蒙第一个App项目 项目创建 工程目录区 预览区 运行Hello World 基本工程目录 ws:工…

信号与槽QT4和QT5的区别

信号与槽QT4和QT5的区别 Qt4 connect(btn, SIGNAL(clicked()), this, SLOT(close()));在 Qt 4 中&#xff0c;信号和槽的连接使用了一种不同的语法&#xff0c;这是 Qt 框架特有的&#xff0c;利用了 Qt 的元对象系统&#xff08;Meta-Object System&#xff09;。Qt 4 中连接…

关于“Python”的核心知识点整理大全36

目录 13.4.4 向下移动外星人群并改变移动方向 game_functions.py alien_invasion.py 13.5 射杀外星人 13.5.1 检测子弹与外星人的碰撞 game_functions.py alien_invasion.py 13.5.2 为测试创建大子弹 13.5.3 生成新的外星人群 game_functions.py alien_invasion.py …

Zookeeper-应用实战

Zookeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。 ZooKeeper官方的Java客户端API。 第三方的Java客户端API&#xff0c;比如Curator。 ZooKeeper官方的客户端API提供了基本的操作:创建会话、创建节点、读取节点、更新数据、…

7ADC模数转换器

一.模数转换原理 ADC模拟-数字转换器可以将引脚上连续变化的模拟电压转换成内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁。另外一种是DAC既是与前面相反&#xff0c;如PWM波&#xff0c;由于PWM电路简单且没有额外的功率损耗&#xff0c;更适用于惯性系统的…

整个python脚本解压缩:

# 导入zipfile模块&#xff0c;用于处理zip文件 import zipfile # 导入os模块&#xff0c;用于处理文件和目录 import os # 指定要解压缩的目录 dir_name "D:/test" # 指定压缩文件的扩展名 extension ".zip" # 使用os.walk()遍历目录及其子目录中的所…

损失函数,代价函数,梯度,优化器,学习率,学习率调度器

这些是机器学习中的概念。把这些概念迁移到CV领域要进行一定的抽象。 首先损失&#xff0c;损失是一组参数拟合出来的样本的预测值和样本的真实值之间的差异&#xff0c;损失是用来度量这种差异的&#xff0c;根据不同的拟合权重参数全局有一个对应的损失值&#xff0c;损失后…

随机问卷调查数据的处理(uniapp)

需求&#xff1a;问卷调查 1.返回的数据中包含单选、多选、多项文本框、单文本框、图片上传 2.需要对必填的选项进行校验 3.非必填的多项文本框内容 如果不填写 不提交 表单数据格式 res{"code": 0,"msg": null,"data": [{"executeDay&…

二叉搜索树、AVL、红黑树、B树

文章目录 二叉搜索树2. avl树3. 红黑树 b树和b树比较适合与磁盘打交道的&#xff0c;磁盘操作耗时&#xff0c;这些树 矮&#xff0c;红黑树、avL树高&#xff0c;比较适合与内存打交道。 二叉搜索树 找一个节点的前驱和后继&#xff1a; 前驱&#xff1a;如果节点有左子树&a…

两个图片完美融合 泊松编辑

一、效果惊人 二、步骤 下载安装 https://github.com/Trinkle23897/Fast-Poisson-Image-Editing.git 执行 test 目录下的 python data.py下载数据 执行测试&#xff0c;可以看到效果了 $ fpie -s test1_src.jpg -m test1_mask.jpg -t test1_tgt.jpg -o result1.jpg -h1 -…

JNI学习(二)

静态注册 接着上篇博客学习 JNI函数 JNIEXPORT void JNICALL Java_com_example_jnidemo_TextDemo_setText(JNIEnv *env, jobject this, jstring string){ __android_log_print(ANDROID_LOG_ERROR, "test", "invoke set from C\n");char* str (char*)(*e…

基于SpringBoot和spark的共享单车存储管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot和spark的共享单车存储管…

c语言知识点补充

文件&#xff1a; 1.字符串&#xff1a; 1.srrlen&#xff08;&#xff09;字符串测长函数&#xff1b; 2.strcat&#xff08;&#xff09;字符串连接函数&#xff1b; 3.strcmp&#xff08;&#xff09;字符串比较函数&#xff1b; 4.strcpy&#xff08;&#xff09;字符串拷贝…

【Unity】入门

文章目录 概述常用组件各类文件基础知识创建工程工程目录介绍五个窗口面板创建代码和场景 脚本与编程鼠标的输入键盘的输入代码来操作组件获取物体API资源的使用API定时调用与线程向量的基本运算预制体与实例 物理系统与组件案例实操作快捷键来源 Unity已广泛运用到各个领域&am…

Linux对于软件的管理

软件管理 ​ 在linux操作系统中&#xff0c;关于软件的安装与Windows操作系统上的软件安装以及软件包的管理有很大的不同。在linux中&#xff0c;常常使用apt-get命令进行软件安装。实际上该命令是linux软件包管理&#xff08;PMS&#xff09;的一个工具。在实际工程实践以及软…

如何在Windows上搭建WebDAV服务并通过内网穿透实现公网访问

文章目录 前言1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 安装cpolar内网穿透3.2 配置WebDav公网访问地址 4. 映射本地盘符访问 前言 在Windows上如何搭建WebDav&#xff0c;并且结合cpolar的内网穿透工具实现在公网访…