Java JMS 面试题及详细答案(实战完整版)_第1页
Java JMS 面试题及详细答案(实战完整版)_第2页
Java JMS 面试题及详细答案(实战完整版)_第3页
Java JMS 面试题及详细答案(实战完整版)_第4页
Java JMS 面试题及详细答案(实战完整版)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaJMS面试题及详细答案(实战完整版)一、基础概念类1、什么是JMS?它的核心作用是什么?答案:JMS全称JavaMessageService,是Java提供的一套消息服务标准接口规范,属于J2EE核心规范之一,并不是具体的消息中间件产品。它定义了Java程序访问消息中间件的统一API,让开发者可以基于统一标准实现异步消息通信,不用依赖具体中间件的原生API,切换MQ产品时基本不用改动业务代码。核心作用:实现系统之间解耦通信,服务之间不需要直接调用接口支持异步处理,提升系统响应速度实现流量削峰、任务异步、事件通知等业务场景保障分布式系统消息可靠投递2、JMS和ActiveMQ、RabbitMQ、RocketMQ的关系?答案:JMS是接口规范,ActiveMQ是遵循JMS规范的具体实现产品。RabbitMQ主要遵循AMQP协议,RocketMQ自研协议,二者不完全兼容JMS规范,只是部分适配JMSAPI。简单总结:JMS:标准、接口、协议规范(JDBC同理)ActiveMQ:JMS规范的落地实现(类似MySQL对应JDBC)3、JMS的核心优势是什么?答案:解耦:生产者和消费者完全独立,无需在线、无需互相感知异步:生产者发送消息后直接返回,不用等待消费者处理完成削峰:瞬时高并发流量存入消息队列,消费者匀速消费,避免系统压垮可靠:支持消息持久化、重试、事务,保证消息不丢不重二、核心组件与原理4、JMS核心组件有哪些?各自作用?答案:JMS由6大核心组件构成:ConnectionFactory(连接工厂)Connection(连接)Session(会话)Destination(目的地)MessageProducer(生产者)MessageConsumer(消费者)5、JMS中Session的重要参数、签收模式、事务模式?答案:Session创建时两个核心参数:是否事务、签收模式。1)事务模式事务开启(true):所有发送/消费操作统一commit/rollback,提交才生效,回滚则消息作废或重发。事务关闭(false):默认,每条消息操作即时生效。2)签收模式(Acknowledge)AUTO_ACKNOWLEDGE自动签收:消费者接收消息后,框架自动签收,一旦接收成功MQ删除消息。CLIENT_ACKNOWLEDGE客户端手动签收:必须手动调用acknowledge()方法,业务处理成功再签收,失败不签收,MQ会重发。DUPS_OK_ACKNOWLEDGE懒惰自动签收:容器延迟批量签收,性能高,但可能出现消息重复投递。三、消息模式(重点面试)6、JMS两种消息模型:点对点和发布订阅区别?答案:JMS定义两种核心消息投递模型:1)点对点(P2P/Queue队列)一对一通信,一条消息只会被一个消费者消费消息持久化,不管消费者是否在线,消息会保留,直到被消费支持负载均衡,多个消费者监听同一个队列,消息均匀分发适用于:订单处理、异步任务、一对一通知2)发布订阅(Pub/Sub/Topic主题)一对多通信,一条消息被所有订阅者同时消费默认非持久化:生产者发消息时,消费者不在线则消息丢失无负载均衡,所有订阅者都会收到全量消息适用于:广播通知、系统事件、配置刷新7、Topic如何实现离线消息不丢失?(持久化订阅)答案:普通Topic是非持久化的,消费者离线期间的消息会直接丢弃。想要离线消息保留,需要开启持久化订阅(DurableSubscription)。实现方式:消费者客户端设置唯一的ClientID创建持久化订阅者,指定订阅名称MQ服务端会记录该订阅者状态,离线期间消息会持久化保存消费者重新上线后,会自动消费离线期间堆积的消息注意:持久化订阅针对消费者,不是消息,未订阅的客户端依然收不到历史消息。四、消息可靠性与异常问题(高频)8、JMS如何保证消息不丢失?答案:消息丢失分为三个阶段,分别对应不同保障方案:1)生产者发送阶段丢失解决方案:开启事务+发送确认,发送失败主动重试,事务回滚不提交。2)MQ服务端宕机丢失解决方案:开启消息持久化,消息落地磁盘后再返回成功。3)消费者消费阶段丢失解决方案:使用手动签收模式,业务逻辑执行成功后再签收,业务异常不签收,MQ自动重发。9、JMS为什么会出现消息重复?如何解决幂等?答案:重复消息产生原因:网络超时:消费者处理成功,但是签收响应丢失,MQ未收到签收,触发重发DUPS_OK懒惰签收模式,批量签收导致重复投递事务回滚、消费者重启导致消息重发幂等解决方案(实战常用):每条消息生成唯一msgId,消费前先查询数据库/Redis判断是否已处理业务唯一键约束,比如订单号唯一,重复消费直接忽略状态机判断,已完成的任务不再重复执行10、手动签收和自动签收的使用场景?答案:自动签收AUTO_ACK:适用于简单日志、监控、非核心通知,允许少量消息丢失,追求高吞吐量。手动签收CLIENT_ACK:适用于订单、支付、账务等核心业务,必须保证消息一定处理成功,业务失败必须重试。五、事务与消息机制11、JMS事务的特点?和数据库事务能否混用?答案:JMSSession事务是本地事务,只针对消息发送和消费生效,无法直接管理数据库事务。普通JMS事务无法保证DB操作+MQ消息同时成功或同时失败,会出现数据不一致:DB成功、MQ发送失败→业务数据存在,无消息触发后续流程MQ发送成功、DB失败→消息已发送,业务数据未生成如果需要跨数据库和MQ的事务一致性,需要使用JTA分布式事务或最终一致性方案(可靠消息最终一致性)。12、JMS消息有哪些类型?日常最常用哪种?答案:JMS定义5种消息类型:TextMessage:字符串消息(最常用,JSON报文基本都用这个)BytesMessage:字节流消息ObjectMessage:序列化对象消息(不推荐,序列化兼容差)MapMessage:键值对消息StreamMessage:流式消息企业开发统一使用TextMessage+JSON,可读性高、兼容性强、跨语言友好。六、实战场景与踩坑题13、队列消息堆积的原因和解决方案?答案:堆积原因:消费者消费速度<生产者发送速度消费者阻塞、超时、死循环导致消费卡顿消息重试过多,坏消息一直占用队列消费者服务宕机、重启、离线解决方案:排查慢消费代码,优化业务逻辑、减少IO阻塞增加消费者节点,横向扩容提升消费能力设置消息重试次数,超限进入死信队列,避免卡死队列拆分大消息、批量消费提升吞吐量14、什么是死信队列?JMS中如何使用?答案:死信队列(DLQ)用来存放正常队列无法处理的异常消息。触发死信的场景:消息重试次数达到上限依然消费失败消息过期未被消费消息格式异常、无法解析作用:避免异常消息一直重试阻塞队列,保证正常业务消息不受影响,同时可以单独监听死信队列,统一排查异常数据。15、JMS同步消费和异步消费的区别?答案:同步消费:调用receive()方法,线程阻塞,直到获取到消息或超时,适合简单、低并发、需要即时获取消息的场景。异步消费:注册MessageListener监听器,有消息自动触发回调,线程不阻塞,企业开发主流方式,高并发、高性能。七、SpringJMS面试题16、Spring整合JMS的核心组件?答案:ConnectionFactory:连接工厂JmsTemplate:Spring封装的消息发送工具类,简化原生JMS繁琐代码DefaultMessageListenerContainer:消息监听容器,管理消费者线程、重试、事务MessageConverter:消息转换器,自动实现对象与JSON字符串转换17、JmsTemplate的优缺点?答案:优点:屏蔽原生JMS复杂的创建连接、Session、关闭资源等模板代码自带异常重试、资源回收,不易泄露连接支持配置化事务、签收模式缺点:高度封装,底层原理不熟悉容易踩坑默认自动签收,核心业务需要手动改配置八、高频压轴面试题18、请你对比Queue和Topic业务选型场景答案:选用Queue队列场景:任务异步处理、订单创建、支付回调、短信发送需要负载均衡,多消费者分担压力一条任务只需要被处理一次选用Topic主题场景:系统广播、配置更新、全局事件通知多个服务需要同时感知同一个事件日志采集、监控事件推送19、如何保证消息投递顺序性?答案:JMSQueue默认单队列内消息先进先出,但多消费

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论