ActiveMQ面试题

ActiveMQ宕机了怎么办

在这里插入图片描述
官方的解决方案是主从集群(备份)方案
zookeeper集群
Replicated(瑞pk得) levelDB就是之前在讲消息持久化kahaDB的另一种消息持久化方案,这种方案的性能会比较好
activemq集群

activemq最起码有三个,因为一个activemq挂了之后可以在另外两个中选取,如果只有两个的话挂了一个就只剩下一个没法选取了,三台activemq只有一台是master,所以只有一台在生效,其他客户端只会连接master,其他两台只起到一个备份的作用,如果master宕机了,那么zookeeper会从剩下的两台activemq中通过选取机制选取出一台成为master
在这里插入图片描述
zookeeper集群默认端口是2181,如果在同一台机器上要建立3个zookeeper那么需要改端口,activemqweb端口和tcp协议端口同理
在这里插入图片描述

用了集群之后,使用的时候连接地址需要改故障迁移连接方式,加上failover的前缀
在这里插入图片描述

如何防止消息方消息重复消费

解决消费方幂等性的问题:

产生:当生产方和消费方有可能因为一个网络延迟等原因,MQ服务器无法即使接收到消费方应答,导致MQ重试,在重试过程中造成重复消费问题。

解决思路:

  1. 如果消费方是做数据库操作,那么可以把消息的ID作位表的唯一主键,这样我们可以在重试的情况下,会触发主键冲突从而避免数据出现脏数据。

(也可以这么说是消息头中有个可以自己设置的id,自己可以在消费方通过代码判断这个id是否取到过,若有则不取)

  1. 如果不是做数据库操作,可以借助第三方的缓存应用,列入redis,来做消费记录,每次消息被消费完成时候,把当前消息的ID作位key存入redis,每次消费前,先到redis查询有没有该消息的消费记录

如何防止消息丢失

以下手段可以防止消息丢失:

  1. 生产者和消费者使用事务
  2. 在消费方采用手动消息(ACK)
  3. 消息持久化,例如数据库或者日志
  4. ActiveMQ自带的死信队列

什么是死信队列?

这些前面都有讲,现在再做一下整理

什么是死信队列

死信队列是MQ产品在处理失败或者过期的情况下来保证消息不会丢失的机制,

哪些消息会处理失败?

重发失败6次的时候,当然这个可以设置,重发时间也可以设置
MQ在遇到事务开启手动调用rollback
开启事务但是没有commit
未开启事务,手动确认调用了一个session.recover方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无极的移动代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值