【Java进阶营】Java面试之消息队列

RocketMQ入坑指南(四):消费者的使用方式 在这里先祝福大家新年快乐!因为假期原因,距离上一篇的生产者教程已经过了很久,今天是上班的第一天,我们继续分享RocketMQ的第四篇教程,主要介绍消费者相关的知识。消费者组:一个逻辑概念,在使用消费者时需要指定一个组名。一个消费者组可以订阅多个Topic。消费者实例:一个消费者组程序部署了多个进程,每个进程都可以称为一个消费者实例。订阅关系:一个消费者组订阅一个Topic的某一个 Tag,这种记录被称为订阅关系。实际使用中,要保证消费订阅关系一致,一个消费者组中的订阅Topic和Tag必须一致。 阅读详情

1.应用场景
解耦
异步
流量消峰
日志记录
2.重复消息的解决方案
消费端处理消息的业务逻辑保持幂等性
保证每条消息都有唯一编号且保证消息处理成功与去重表的日志同时出现
3.有序性
Producer对于需要顺序的消息发送到同一个queue中
Consumer使用MessageListenerOrderly来对消息进行有序消费
4. 如何实现分布式事务
发送方向 MQ 服务端发送消息。
MQ Server 将消息持久化成功之后,向发送方 ACK 确认消息已经发送成功,此时消息为半消息。
发送方开始执行本地事务逻辑。
发送方根据本地事务执行结果向 MQ Server 提交二次确认(Commit 或是 Rollback),MQ Server 收到
Commit 状态则将半消息标记为可投递,订阅方最终将收到该消息;MQ Server 收到 Rollback 状态则删除半
消息,订阅方将不会接受该消息。
在断网或者是应用重启的特殊情况下,上述步骤4提交的二次确认最终未到达 MQ Server,经过固定时间后
MQ Server 将对该消息发起消息回查。
发送方收到消息回查后,需要检查对应消息的本地事务执行的最终结果。
发送方根据检查得到的本地事务的最终状态再次提交二次确认,MQ Server 仍按照步骤4对半消息进行操作。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
5.push和pull模式
push模式:客户端与服务端建立连接后,当服务端有消息时,将消息推送到客户端。
pull模式:客户端不断的轮询请求服务端,来获取新的消息。
但在具体实现时,Push和Pull模式都是采用消费端主动拉取的方式,即consumer轮询从broker拉取消息。
6. pull方式实现,RocketMQ如何保证消息的实时性呢?
长轮询即是在请求的过程中,若是服务器端数据并没有更新,那么则将这个连接挂起,直到服务器推送新的
数据,再返回,然后进入循环周期。
客户端像传统轮询一样从服务端请求数据,服务端会阻塞请求不会立刻返回,直到有数据或超时才返回给客
户端,然后关闭连接,客户端处理完响应信息后再向服务器发送新的请求。

  1. 消息模式
    DefaultMQPushConsumer实现了自动保存offset值以及实现多个consumer的负载均衡。

//设置组名
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(“HAOKE_IM”)
通过groupname将多个consumer组合在一起,那么就会存在一个问题,消息发送到这个组后,消息怎么分配呢? 这个时候,就需要指定消息模式,分别有集群和广播模式。

集群模式
同一个 ConsumerGroup(GroupName相同) 里的每 个 Consumer 只消费所订阅消息的一部分内容, 同
一个 ConsumerGroup 里所有的 Consumer消费的内容合起来才是所订阅 Topic 内容的整体, 从而达到
负载均衡的目的 。
广播模式
同一个 ConsumerGroup里的每个 Consumer都 能消费到所订阅 Topic 的全部消息,也就是一个消息会
被多次分发,被多个 Consumer消费。
// 集群模式
consumer.setMessageModel(MessageModel.CLUSTERING);
// 广播模式
consumer.setMessageModel(MessageModel.BROADCASTING);
8. 存储机制
8.1 消息数据的存储
在RocketMQ中,消息数据是保存在磁盘文件中,为了保证写入的性能,RocketMQ尽可能保证顺序写入,顺序写入的效率比随机写入的效率高很多。
RocketMQ消息的存储是由ConsumeQueue和CommitLog配合完成的,CommitLog是真正存储数据的文件,
ConsumeQueue是索引文件,存储数据指向到物理文件的配置。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

8.2 同步刷盘与异步刷盘
同步刷盘
在返回写成功状态时,消息已经被写入磁盘 。
具体流程是:消息写入内存的 PAGECACHE 后,立刻通知刷盘线程刷盘,然后等待刷盘完成,刷盘线程
执行完成后唤醒等待的线程,返回消息写成功的状态 。
异步刷盘
在返回写成功状态时,消息可能只是被写入了内存的 PAGECACHE,写操作的返回快,吞吐量大
当内存里的消息量积累到一定程度时,统一触发写磁盘动作,快速写入。
broker配置文件中指定刷盘方式
flushDiskType=ASYNC_FLUSH – 异步
flushDiskType=SYNC_FLUSH – 同步

Java面试突击系列(一):消息队列的面试连环炮 消息队列的面试连环炮 前言 你用过消息队列么? 说说你们项目里是怎么用消息队列的? 我们有一个订单系统,订单系统会每次下一个新订单的时候,就会发送一条消息到ActiveMQ里面去,后台有一个库存系统,负责获取消息,然后更新库存。 为什么使用消息队列? 你的订单系统不发送消息到MQ,而是直接调用库存系统的一个接口,然后直接调用成功了,库存也更新了,那就不需要使用消息队列了呀 使用消息队列的主要作用是:异步、解耦、削峰 消息队列都有什么优缺点? Kafka、activeMQ、RibbitMQ、Ro 阅读详情

相关推荐

java分布式面试题之消息队列ActiveMQ部分

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

2401_84046545的博客 833

RocketMQ的Consumer详解之消息模式(集群和广播模式)

consumer.setMessageModel(MessageModel.CLUSTERING); public void setMessageModel(MessageModel messageModel) { this.messageModel = messageModel; } // // Source code recreated fr...

Leon_Jinhai_Sun的博客 2019

Java架构师技能点面试题汇总消息队列面试题

activeMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。2.activemq的作用以及原理?Activemq 的作用就是系统之间进行通信。当然可以使用其他方式进行系统间通信, 如果使用 Activemq 的话可以对系统之间的调用进行解耦, 实现系统间的异步通信。原理就是生产者生产消息, 把消息发送给activemq。...

澎湖Java架构师的博客 953

RocketMQ广播消费消息

怎么使用广播消费模式呢?在广播模式下,同一个消费者组中的每个消费者都会收到消息的一个副本,每个消费者都会独立地消费消息,从而实现了消息的广播消费。在集群消费模式下,同一个消费者组(Consumer Group)中的每个消费者都会消费消息的一个副本。消息会被分发到不同的消费者实例上,但是同一个消息只会被同一个消费者组中的一个消费者消费。在广播消费模式下,同一个消费者组中的每个消费者都会收到消息的一个副本,即每个消费者都会独立地消费消息。消息会被广播到同一个消费者组中的所有消费者实例上。

weixin_43580824的博客 1562

RocketMQ系列 (五) 广播与延迟消息

今天要给大家介绍RocketMQ中的两个功能,一个是“广播”,这个功能是比较基础的,几乎所有的mq产品都是支持这个功能的;另外一个是“延迟消费”,这个应该算是RocketMQ的特色功能之一了吧。接下来,我们就分别看一下这两个功能。 广播 广播是把消息发送给订阅了这个主题的所有消费者。这个定义很清楚,但是这里边的知识点你都掌握了吗?咱们接着说“广播”的机会,把消费者这端的内容好好和大家说说。 首先,消费者端的概念中,最大的应该是消费者组,一个消费者组中可以有多个消费者,这些消费者必须订阅同一个Topic

DN金猿的博客 630

Java面试进阶指北

大家好,我是 JavaGuide 的作者,目前已经写了接近5年的Java。从大二开始坚持写作,到目前为止我在全网输出了 200 多篇优质原创。 不难发现,近几年的面试难度越来越大,想要找到一份还不错的工作越来越难。越来越多的人开始抱怨:“CS领域是真特么卷!”。然而,单纯抱怨有用么?你对其他求职者说:“大家都不要刷 Leetcode 了啊!都不要再准备高并发、高可用的面试题了啊!现在都这么卷了!” 技术面试不同于编程,编程厉害不代表技术面试就一定能过。现在你去面个试,不简单准备一下子,那简直就是往枪口上

JavaGuide 8078

Java面试之消息队列

1.应用场景 解耦 异步 流量消峰 日志记录 2.重复消息的解决方案 消费端处理消息的业务逻辑保持幂等性 保证每条消息都有唯一编号且保证消息处理成功与去重表的日志同时出现 3.有序性 Producer对于需要顺序的消息发送到同一个queue中 Consumer使用MessageListenerOrderly来对消息进行有序消费 4. 如何实现分布式事务 发送方向 MQ 服务端发送消息...

weixin_34348111的博客 630

Docker环境下onlyOffice 7.5.1破解版部署全攻略(含ARM架构适配)

本文提供了在Docker环境中部署OnlyOffice 7.5.1破解版的完整实战指南。内容涵盖x86与ARM架构服务器的详细部署步骤、环境配置、持久化存储设置以及生产环境下的安全与性能优化。重点解决了ARM架构适配的常见问题,并分享了使用Docker Compose进行服务编排和日常维护的技巧,帮助用户快速搭建私有化文档协作平台。

redis7keeper的博客 353

消息队列面试题及答案,2024历年阿里Java面试真题

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)

2301_79098332的博客 1282

Windows事件ID 10010报错:DCOM注册超时与Game Bar修复指南

DCOM(分布式组件对象模型)是Windows中用于跨进程组件通信的核心机制,其注册超时问题常表现为事件ID 10010报错。当Game Bar的PresenceWriter组件因权限配置不当、组件损坏或开机资源竞争而无法在限定时间内向DCOM注册时,系统会记录该错误,并可能伴随DCOM服务主机CPU占用升高或游戏栏功能异常。理解DCOM激活原理与Network Service账户权限,有助于从权限修复、组件重注册及开机时序优化等层面系统排查。本文针对不同Windows版本,提供从静默处理到根治的完整方案,

weixin_33563728的博客 919

Java高频面试之消息队列与分布式篇

消息队列的基本作用是提供可靠、高效、异步的消息通信机制,实现系统之间的解耦、异步处理、削峰填谷、数据分发和错误处理等功能。它在分布式系统、微服务架构和大规模应用中发挥着重要的作用。

Java领域优秀创作者 2860

一文搞懂 JavaScript 模块化规范:CommonJS、AMD、ES6 Module

在现代 JavaScript 开发中,模块化是提升代码组织性和可维护性的关键。本文深入解析三种主流的模块化规范——CommonJS、AMD 和 ES6 Module。

Allen- 3479

Java面试——消息队列

一、消息队列的使用场景 ☞ 以下介绍消息队列在实际应用常用的使用场景。异步处理、应用解耦、流量削锋和消息通讯四个场景。 【1】异步处理:场景说明:用户注册后,需要发注册邮件和注册短信。 引入消息队列后架构如下:用户的响应时间=注册信息写入数据库的时间,例如50毫秒。发注册邮箱、发注册短信写入消息队列后,直接返回客户端,因写入消息队列的速度很快,基本可以忽略,因此用户的响应时间可能是50毫秒。按照传统的做法①、串行方式,将注册信息写入数据库成功后,发注册邮件,再发送注册短信,以上三个成功后,返回客户端.

程序猿进阶 4137

《RT-Thread入门与实战》第1章:RT-Thread概述与核心优势

2006年由熊谱翔发起2017年成立上海睿赛德电子科技公司2021年成为国内首个通过ISO 26262 ASIL-D认证的RTOS。

2301_79143213的博客 986

Unity-Mirror网络框架-从入门到精通之MultipleMatches示例

Multiple Matches 示例主要讲述了如何在使用 Mirror 网路框架时管理多个游戏匹配。以及如何设置一个能够同时支持多个游戏会话的系统,使玩家能够加入他们所选择的比赛,而不是强制他们加入一个单一的匹配。

TxNet 964

中华石杉互联网Java进阶面试训练营【全网发布ing】

写在前面相信不少Java工程师的职业生涯中,尤其在早期,都或多或少经历过下面的场景:公司规模小,项目没有任何技术挑战。每天重复着CRUD的工作,你也自黑为CRUD工程师。...

石杉的架构笔记 1万+

Python爬虫实战:扒取专利数据库核心信息,我用这招搞定反爬+数据结构化(附完整可运行代码)

这套爬虫方案从「实际需求」出发,解决了专利数据库抓取的核心痛点:反爬突破、数据结构化、标题创作。核心价值不在于代码多复杂,而在于「实用」——我用这套代码半天就抓取了800+条Python爬虫相关专利,比手动效率提升了几十倍。最后想说:爬虫技术的核心是「解决问题」,而不是炫技。专利数据能帮我们快速了解行业技术趋势,尤其是程序员,从专利中扒出的核心逻辑,远比零散的博客文章更系统。希望这篇实战分享能帮到有需要的小伙伴,也欢迎在评论区交流专利爬虫的更多技巧!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2127

2024年最新实际工作及面试中遇到的消息队列问题,面试java工程师

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取需要这份系统化的资料的朋友,可以点击这里获取。

2401_84585372的博客 327

Android实战——白天黑夜模式设置

白天黑夜模式是一种动态的UI模式,根据当前时间或用户设置的偏好,在白天和黑夜之间进行切换。它通过调整应用程序的颜色、亮度和其他可视化元素来提供更加舒适和易读的用户界面。

小旭的专栏 5229

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java架构师进阶之路

包含了计算机基础、算法和数据结构、常用工具、java核心知识、性能优化、基础框架、数据库、消息队列、缓存中间件、搜索引擎、大数据、RPC、网关、容器、面试等知识

henhenha的博客 5843

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Java进阶营】收藏 Java 500 道核心面试题全解析

每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。 那怎样才能快速拿到大厂的 Offer 呢? 从业十多年,我从面试者变成面试官,在 Java 面试上积累了比较丰富的经验。 其实,很多面试者在搜集面试资料的时候都踩过一些“坑”,你是不是也遇到过: 免费搜索的面试题,内容不全面,这就算了,有时候答案都不准确;很多培训机构

hong7888888的博客 160

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day31】—— 消息队列1

总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。

2401_84433535的博客 867

Java模拟消息队列

今天面大数据架构师实习生,被问到怎么使用Java来实现简单的消息队列,,一脸懵逼,,, package com; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; /** * created by LMR on 2019/7/10 */ public cl...

LMR的博客 7701

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day34】—— 消息队列2

百日闭关修炼,每日三道高频面试题。一起冲进大厂!续上消息队列2,快上车!

陈哈哈的菜园子 7815
上一篇: 【Java进阶营】聊聊Java里常用的并发集合
下一篇: 【Java进阶营】微服务架构之「 API网关 」
jvm大志
博客等级 码龄5年 3粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值