消息队列-ActiveMQ面试题

ActiveMQ是开源的JMS消息中间件,提供高可用性和可伸缩性。JMS定义了消息传递的标准,包括生产者、消费者、消息和连接工厂等概念。死信队列用于处理无法正常投递的消息。当ActiveMQ服务器宕机,可以通过持久化消息和调整配置来防止数据丢失。消息重发机制可通过最大重试次数和初始重发延迟设置。针对消息不均匀消费,可以调整消费者prefetch值。了解这些机制有助于优化ActiveMQ的使用。
摘要由CSDN通过智能技术生成

概念

能简单的介绍下 ActiveMQ 吗?

ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,提供了高可用、高性能、可伸缩性等。 

应用场景: 
1. 短信、邮件服务 
2. 流量削峰:比如抢红包、秒杀等

什么是 JMS?

java Message service, JMS 是一个 java 平台中关于面向消息中间件(MOM)的API,它并不是MOM,而只是一个API。 
在对 API 进行标准化的过程中,JMS正式定义了以下几种概念和构件:
- JMS客户端:百分百java写的应用,用来接收和发送信息。
- Non-JMS 客户端:使用 JMS 提供商提供的本地API来接收发送消息。
- JMS生产者:创建和发送消息的客户端应用
- JMS消费者:接收和处理消息的客户端应用
- JMS提供者:基于java对JMS的API实现,比如ActiveMQ
- JMS消息:JMS最基本的概念,通过 JMS 客户端来发送和接收
- JMS领域:两种消息传递的类型,点对点和发布订阅
- 连接工厂:客户端使用连接工厂来创建与JMS提供者的连接
- 目的地:消息发送以及消息获取的地方

什么是死信队列?

先说死信定义:当一条消息在队列中出现以下三种情况的时候,该消息就会变成一条死信。
1. 消息被拒绝,并且 requeue = false
2. 消息 TTL 过期
3. 队列大道最大长度
死信队列:当消息在一个队列中变成死信之后,如果配置了死信队列,它将被重新publish到死信死信交换机,
  死信交换机将死信投递到一个队列上,这个队列就是死信队列。

具体使用

ActiveMQ 服务器宕机怎么办?

解决方案:

1. 用持久化消息
2. 非持久化消息及时处理不要堆积
3. 启动事务,启动事务后 commit() 方法会负责任的等待服务器的返回,也就不会关闭连接导致消息丢失

持久化消息非常慢?

默认情况下非持久化消息是异步发送的,持久化消息是同步发送的。在硬盘读写慢的情况下,发送消息的速度是无法忍受的。
建议:发送消息时,请开启事务模式,因为消息都是异步发送的,效率更高。

消息的不均匀消费?

ActiveMQ 的 prefetch 机制。
当消费者去获取消息时,会一次性获取一批,默认是 1000 条。
解决方案:
  修改 prefetch,例如将 prefetch 设为 1,每次处理一条信息。

ActiveMQ 中的消息重发机制?

部分属性:
1、 最大重试次数:maximumRedeliveries
  为 -1 时不限制次数,为0时表示不进行重传,默认值为6
2. 初始重发延迟时间:initialRedeliveryDelay
  默认 1000L

 扫VX 领Java资料,前端,测试,python等等资料都有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值