1. 什么是 MQ,有什么作用?
MQ 就是消息中间件,它的作用有异步,解耦,削峰。
2. 市场上有很多 MQ 产品,我们要如何选择?
常见的 MQ 有 ActiveMQ,它是老牌的 MQ,性能不算太好;还有 RocketMQ,是阿里巴巴开源的 MQ,性能卓越,但是社区不活跃;RabbitMQ,性能十分强悍,社区活跃,唯一的缺点就是它不是 java 语言编写的,难以做二次开发;还有 kafka,一般用于大数据领域。我们可以根据自己的系统的并发量,以及是否要做二次开发等来确定使用哪种 MQ。
3. 你们公司用的是哪个 MQ?主要用来做什么?
我们公司用的是 ActiveMQ,主要用来处理异步通知的。
4. 简单说一下 ActiveMQ。
ActiveMQ 下载安装后,其端口是 61616,图形界面端口是 8161,它主要有两种工作模式,一个是点对点,一个发布订阅。点对点的目的地是 queue,一条消息只能有一个消费者;发布订阅目的地是 topic,一条消息可以有多个消费者,消费者只能消费订阅了这个 topic 之后的消息。
5. ActiveMQ 支持哪些传输协议?
支持 TCP,UDP,http,SSL,NIO等协议,TCP 是默认的协议,一般我们会使用 NIO协议,在 activemq.xml 中就可以修改。
6. 如何保证消息的可靠性?
一个是事务,一个是签收,还有就是持久化。生产者开启事务,发送消息后需要 commit,消费者收到消息后需要进行签收。持久化就是将消息写入数据库或者磁盘。
7. ActiveMQ 有哪些持久化方式?
kahadb,leveldb,jdbc 等,常用的是 jdbc 持久化。持久化的逻辑就是生产者生产了消息,先持久化,然后发送到 MQ 中,如果消费者消费成功就删除消息,否则就继续消费。
8. 简述 ActiveMQ jdbc 持久化的流程。
首先将 MySQL 驱动包加到 ActiveMQ 的 lib 目录下; 然后在 ActiveMQ 的配置文件中配置数据源; 配置好之后 ActiveMQ 收到消息就会在数据库生成三张表,activemq_acks 表用来存储发布订阅关系,activemq_locks 是集群时需要用到的表,activemq_msgs 就是存储消息的表。
9. 如何解决重复消费问题?
正常情况下消费者签收了消息,消息就会从 ActiveMQ 中移除,但是可能由于网络原因,ActiveMQ 没收到签收信息,就会出现重复消费问题。我们可以消费消息时往数据库或者 Redis 写一条记录,消费时如果数据库或 Redis 有这条记录了,就不再消费。
10. 如何解决消息堆积问题?
紧急扩容消费者,部署更多的消费者去消费。
11. 我需要往一个地址发通知,如果通知失败,隔一段时间再通知,如何实现?
可以用 ActicveMQ 的延时投递。在 ActiveMQ 的配置文件中开启对延时投递的支持,即 schedulerSupport=true
,然后在生产者中设置延时投递的相关参数即可。
扫描二维码
联系客服