ActiveMQ面试题

ActiveMQ宕机了怎么办官方的解决方案是主从集群(备份)方案zookeeper集群Replicated(瑞pk得)levelDB就是之前在讲消息持久化kahaDB的另一种消息持久化方案,这种方案的性能会比较好activemq集群activemq最起码有三个,因为一个activemq挂了之后可以在另外两个中选取,如果只有两个的话挂了一个就只剩下一个没法选取了,三台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方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125570.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CSS之 sass、less、stylus 预处理器的使用方式

    CSS之 sass、less、stylus 预处理器的使用方式

    2020年11月19日
    163
  • B站视频API接口_视频搜索接口

    B站视频API接口_视频搜索接口Vue2.5打造简洁视频webapp项目api接口此文档为非官方接口文档,无法保证接口有效性。以下接口为本项目目前使用的接口(也可以直接看src/api/文件目录下的接口)仿B站视频网站项目源码:进入项目源码仓库了解项目更多内容请看:Vue2.5打造简洁视频webapp(近期停更。。。)首页模块推荐视频https://www.bilibili.com/index/ding.json搜索模块默认搜索词http://api.bilibili.cn/x/web-interface/sear

    2022年10月4日
    5
  • 转载: 约瑟夫环 循环链表 必备「建议收藏」

    转载: 约瑟夫环 循环链表 必备

    2022年3月1日
    48
  • Pycharm中三种注释[通俗易懂]

    Pycharm中三种注释[通俗易懂]”””注释””””’注释”’\#注释前两种不是真正的注释,知识字符串的另一种表现形式,例如会被用于写__doc__等长字符串的时候起到保留格式的目的,虽然能够完成注释功能,但实际上还是字符串。按ctrl+/即可快速注释代码块ps.转载出处作者已注销账号…

    2022年8月28日
    5
  • java 特点_JAVA的几个重要特点[通俗易懂]

    java 特点_JAVA的几个重要特点[通俗易懂]展开全部一.简单性:Java是纯62616964757a686964616fe58685e5aeb931333433663063面向对象语言,语法简单明了,易于掌握。Java使用接口取代了多重继承,并且取消了指针,因为多重继承和指针会使程序变得复杂。Java还会自动地收集内存垃圾,使得内存管理变得更为简单。Java还提供了丰富的类库、API文档以及第三方开发包,还有大量Java的开源项目。二.面向…

    2022年7月7日
    17
  • vim保存和退出_vim编辑器保存退出

    vim保存和退出_vim编辑器保存退出退出vim的快捷键,不需要进入命令编辑模式按住shiftzz保存退出zq不保存退出,q表示放弃之所以按住shift,其实是切换大小写在命令编辑模式下::q不保存退出:q!不保存强制退出:wq保存退出,w表示写入,不论是否修改,都会更改时间戳:x保存退出,如果内容未改,不会更改时间戳“:x”和“:wq”的区别如下:(1…

    2022年8月24日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号