消息队列Message Queue

[RTT例程练习] 2.8 消息队列message queue 消息队列(来自百度百科) 消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。消息队列是随内核持续的。 描述程序运行的过程。 首先创建了三个线程,三个线程处于同一优先级,但由于thread1首先被启动,所以它先运行,thread2,3紧随其 阅读详情

1. 为什么要用消息队列?

        消息队列MQ是一个中间件:负责把要传输的数据放在队列中。 JDK实现的队列种类虽然有很多种,但都是简单的内存队列,所以MQ还是必要的。

1.1 解耦

一个例子:系统A负责产生一个userId,系统B、C、D拿这个userId去做相关的操作。 系统A将userId写到消息队列中,系统C和D从消息队列中拿数据,这样系统A与系统B、C、D都解耦了(当系统B、C、D发生变化时,系统A都不用经常改动)。

其好处如下:

  • 系统A只负责把数据写到队列中,谁想要或不想要这个数据(消息),A一点都不关心。

  • 即便现在系统D不想要userId这个数据了,系统B又突然想要userId这个数据了,都跟系统A无关,A一点代码都不用改。

  • 系统D拿userId不再经过系统A,而是从消息队列里边拿。系统D即便挂了或者请求超时,都跟系统A无关,只跟消息队列有关。

1.2 异步

    为了提高用户体验和吞吐量,可以异步地调用系统B、C、D的接口。


1.3 削峰/限流

一个削峰场景:每月一次大促,期间并发可能会很高(每秒3000个请求)。假设现有两台机器处理请求,且每台机器每次只能处理1000个请求。

        系统B、C根据自己能够处理的请求数去消息队列中拿数据,这样即便有每秒有8000个请求,那只是把请求放在消息队列中,从MQ拿多少消息由系统自己控制,就不会把整个系统给搞崩。

2. 使用消息队列有什么问题?

2.1 高可用

        无论使用消息队列来做解耦、异步还是削峰,MQ肯定不能是单机的,必须是集群/分布式的。

2.2 数据丢失问题

        将数据写到消息队列上,系统B和C还没来得及取消息队列的数据,就挂掉了。如果没有做任何的措施,数据就丢了。

 数据丢失问题:消息队列中的数据需要存储起来,尽可能减少数据的丢失。

  • 存储在哪:磁盘?数据库?Redis?分布式文件系统?

  • 同步存储还是异步存储?

2.3 消费者怎么得到消息队列的数据?

  • 生产者将数据放到消息队列中,消息队列有数据了,主动叫消费者去拿(俗称push);

  • 消费者不断去轮询消息队列,看看有没有新的数据,如果有就消费(俗称pull)。

2.4 其他要考虑的问题

  • 消息重复消费?

  • 保证消息是绝对有顺序?

虽然MQ带来了那么多好处,但同时也会提高系统的复杂性。

JMS Message Queue 实例 是一个快速的开源消息组件(框架),支持集群,同等网络,自动检测,TCP,SSL,广播,持久化,XA,和J2EE1.4容器无缝结合,并且支持轻量级容器和大多数跨语言客户端上的Java虚拟机。消息异步接受,减少软件多系统集成的耦合度。消息可靠接收,确保消息在中间件可靠保存,多个消息也可以组成原子事务。 立即下载

相关推荐

Obsidian的Git插件设置配置全流程 -- 简单的电脑端多平台同步方案及常见问题

Git同步obsidian的保姆级教程和常见问题

weixin_44370439的博客 1万+

webRTC base模块MessageQueue消息队列的实现

MessgeQueueMessageQueueManager消息队列MessageQueue的管理器 全局单例类 MessageQueueManager* MessageQueueManager::instance_ = NULL; // 全局变量 确保Manager是单例 MessageQueueManager* MessageQueueManager::Instance() { // C+

sliver.chen的博客 1552

告别双导航栏!微信小程序web-view嵌入H5的导航栏隐藏实战(附uniapp代码)

本文详细解析了微信小程序中web-view嵌入H5页面时出现的双导航栏问题,并提供了基于uniapp的完整解决方案。通过环境感知、动态适配和样式隔离等技术手段,实现导航栏的无缝整合,提升用户体验和屏幕空间利用率。文章包含实战代码示例和常见问题排查指南,帮助开发者快速解决这一常见痛点。

weixin_26945061的博客 344

push与push_back

1.push():在 queue 的尾部添加一个元素的副本。empty():如果 queue 中没有元素的话,返回 true。front():返回 queue 中第一个元素的引用。back():返回 queue 中最后一个元素的引用。2.push_back():函数将一个新的元素加到。//pop_back() //移除最后一个元素。pop():删除 queue 中的第一个元素。size():返回 queue 中元素的个数。的最后面,位置为当前最后一个元素的下一个元素。

m0_51863774的博客 2821

COMSOL中的动网格

首先我们先了解几个概念 (1)网格重划分(remesh):就是在某些特定的区域进行网格的重新划分,在Maxwell软件中的直线运动区域,当运动物体运动后,这个区域进行重新划分。 (2)morph:网格不重新划分,小范围的进行网格变形,针对运动物体运动位移较小,对变形区域不进行重划分,能够提高效率。 (3)网格滑移(sliding):针对圆形运动区域,运动与非运动区域进行网格滑移,当然边界上两侧网格不共节点,该方法不需要网格重新划分,大部分软件针对圆形运动区域采用该方法,比如maxwell的band,b

midiio的博客 7870

OCTA-500:用于光学相干断层扫描血管造影研究的视网膜数据集|文献速递-基于生成模型的数据增强与疾病监测应用

数据集提供了丰富的图像和注释,包括两种模态(OCT/OCTA体积)、六种投影类型、四种文本标签(年龄/性别/眼别/疾病)以及七种分割标签(大血管/毛细血管/动脉/静脉/2D FAZ/3D FAZ/视网膜层)。我们介绍了新的 OCTA-500 数据集,该数据集包含来自 500 名受试者的 OCTA 成像,并提供了丰富的图像和标注集。(C) OCTA-500 切片的人工标注示例。图 4. OCTA-500 数据集中文本标签的统计直方图:(a) 性别,(b) 眼别,(c) 年龄,(d) 疾病。

weixin_38594676的博客 1437

消息队列(Message Queue,MQ)的使用

消息队列(Message Queue,MQ)是一种跨进程、跨服务器的通讯机制,它的基本思想是生产者把消息发送到消息队列中,然后消费者从消息队列中获取消息并进行处理,从而实现了生产与消费的解耦。通过MQ可以将消息生产者和消费者进行解耦,生产者只需要将消息发送到MQ中,而不需要知道谁会来处理这个消息,消费者也只需要从MQ中获取消息,并进行相应的处理即可。MQ是一种跨进程、跨服务器的通讯机制,它的基本思想是生产者把消息发送到消息队列中,然后消费者从消息队列中获取消息并进行处理,从而实现了生产与消费的解耦。

qq_27561019的博客 1818

什么是深度展开网络?如何将迭代算法的每一次迭代展开成深度网络对应的一层?深度展开网络进行端对端训练,其中端对端是什么意思?

在深度学习和机器学习的背景下,“端到端”(End-to-end)训练指的是将输入数据直接映射到最终输出的过程,而不需要任何中间的手动数据预处理或特征工程。- **自然语言处理**:端到端自然语言处理系统可以将自然语言输入直接转化为计算机可理解的语言输出,而不需要对语言进行分解和转化。- **推荐系统**:通过使用深度神经网络,端到端推荐系统可以直接根据用户历史行为预测其未来的兴趣爱好,并推荐相应的产品或服务。4. **直接映射**:从输入到输出的直接映射,中间没有任何拆分或分解的过程。

m0_67897882的博客 5435

java message queue_Android7.0 MessageQueue详解

Android中的消息处理机制大量依赖于Handler。每个Handler都有对应的Looper,用于不断地从对应的MessageQueue中取出消息处理。一直以来,觉得MessageQueue应该是Java层的抽象,然而事实上MessageQueue的主要部分在Native层中。自己对MessageQueue在Native层的工作不太熟悉,借此机会分析一下。一、MessageQueue的创建当需...

weixin_39758956的博客 370

EV1527 vs HS1527:固定码芯片的STM32解码避坑指南

本文深入解析EV1527与HS1527固定码芯片的技术差异,提供基于STM32的完整解码方案与稳定性优化策略。通过硬件接口配置、状态机实现及示波器诊断,解决工业遥控、安防报警等场景中的解码难题,特别针对时序差异和干扰问题给出实用解决方案。

o0p1q2r3的博客 331

UG NX与PLC-1500的在环虚拟测试

TIA、PLCSIM、NetToPLCsim、KEPServerEX以及UG NX的在环虚拟测试

lvtlvtlvtlvt的博客 4220

消息队列 | java简单实现

1. 消息队列介绍: 消息队列是MQ是一种系统间相互写作的通信机制 Broker:消息处理中心,负责消息的接收、存储、转发等; Producer:消息生产者,负责产生和发送消息到消息处理中心; Consumer:消息消费者,负责从消息处理中心获取消息,并进行相应的处理。 2. java设计一个简单的消息队列 其结构如下所示: 2.1 消息处理中心 作为消息处理中心,至少有一个数据容器来保存接收到的消息。这里采用java中队列(Queue)的一个子类ArrayBockingQueue来实现。 如下是消

魏云舒的博客 5663

Codex 100个真实案例 - 用AI批量清洗Excel脏数据(10万行3分钟搞定)

每个做数据分析的人都被"脏数据"折磨过——空值、重复行、日期格式五花八门、手机号多一位少一位……手动清洗几千行就已经让人崩溃,更别提10万行了。本文将展示如何用 Codex 生成一套完整的 Python pandas 数据清洗工具,从读取Excel/CSV、识别脏数据、自动清洗、生成清洗报告,到可视化对比清洗前后的数据质量,全程自然语言驱动,10万行数据3分钟搞定!

yueyeguzhuo的专栏 88

消息队列(Message Queue)

消息队列(Message Queue)是一种用于在分布式系统中进行异步通信的机制。它允许生产者(Producer)和消费者(Consumer)之间通过队列进行解耦通信,从而提高系统的可扩展性和容错能力。以下是关于消息队列的详细讲解:消息队列是一种用于分布式系统中进行异步通信的机制,它通过生产者、消费者和队列之间的交互,实现了系统的解耦、异步处理和缓冲处理。在实际应用中,根据具体场景和需求,可以选择不同的消息队列实现和技术。

weixin_63490470的博客 525

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

消息队列(Message Queue)简介及其使用

消息队列(Message Queue)简介及其使用  利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法。MSMQ与XML Web Services和.Net Remoting一样,是一种分布式开发技术。但是在使用XML

陈亚平 的技术博客 2682

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

消息队列(Message Queue)的简单使用

 利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法。MSMQ与XML Web Services和.Net Remoting一样,是一种分布式开发技术。但是在使用XML Web Services或.Net Remoting组件时,C

孤夜寒心泪学习随笔 1468

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

什么是消息队列(Message queue)

写在前面: 最近接触到消息中间件,想通过本篇博文总结一些关于消息队列的知识以及 Java 语言中面向消息中间件(MOM)的API(JMS),希望能够帮助大家更好的理解消息中间件。 一、消息队列概述 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。 消息队列提供了异步的通信协议,每一个贮列中的纪录包...

点滴记录 3万+

ACE之ACE_Message_Queue

ACE_Message_Queue是ACE中通用消息队列,其是ACE_Task以及并发中ACE_Activation_Queue的基础。

多看多听多总结 1354

消息队列(Message Queue)简介及其使用(zz)

消息队列(Message Queue)简介及其使用Monday, 20. March 2006, 02:57:30Message Queue, 消息队列 利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法。MSMQ与XML We

afxid的专栏 1992
上一篇: Kafka 基础知识
下一篇: 线性回归Demo
MusicDancing
博客等级 码龄7年 2684粉丝 314原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值