消息中间件ActiveMQ面试知识

消息中间件的作用

1.异步 2.解耦 3.削峰

消息中间件两种消息模式

1.点对点模式,目的地被称为队列(Queue)
2.发布/订阅模式,目的地被称为主题(Topic)
在这里插入图片描述

ActiveMQ两个经典默认端口

一、61616 二、8161

消息中间件四大元素(简称JMS)

1、JMS provider 实现JMS接口和规范的消息中间件,也就是我们的MQ服务器
2、JMS producer 消息生产者,创建和发送JMS消息的客户端应用
3、JMS consumer 消息消费者,接收和处理JMS消息的客户端应用
4、JMS message 分为消息头、消息属性、消息体三部分

JMS message 消息头(常用五种)

1、JMS Destionation :指定消息发送目的地(Queue或者Topic)
2、JMS DeliveryMode:指定持久模式或者非持久模式
3、JMS Expiration:指定消息过期时间,默认是永不过期、类型为long
4、JMS Priority:指定消息优先级,从 0-9 十个级别,0-4是普通消息,5-9是加急消息,默认4级
5、JMS MessageId:指定唯一识别的消息ID,可以自行指定,如不指定,JMS自动生成

JMS message 消息体(五种格式)

1、TextMessage:普通字符串
2、MapMessage:Map类型的消息,key为String类型,而值为Java的基本类型
3、BytesMessage:二进制数组,byte[]
4、StreamMessage:Java数据流消息,用标准流操作来顺序的填充和读取
5、ObjectMessage:对象消息

JMS message 消息属性

如果需要除消息头字段以外的值,可以使用消息属性
识别、去重、重点标注等操作非常有用
以属性名和属性值对的形式存在,例:message.setStringProperty(“name”,“zs”);

持久模式与非持久模式

持久:应该被传送“一次仅仅一次”,意味着如果JMS提供者出现故障,该消息不会丢失,它会在服务器恢复之后再次传递。
非持久:最多会传递一次,意味这服务器出现故障,该消息永远丢失

如何保证消息中间件的可靠性

1、persistent持久性
2、事务:开启事务后需要commit;
3、Acknowledge签收:自动签收、手动签收、允许重复签收

ActiveMQ传输协议

MQ目录下conf/activemq.xml文件中transportConnectors标签修改选择传输协议,默认有五种
在这里插入图片描述

常用传输协议NIO

## ActiveMQ高可用(可持久化) 为避免意外宕机后丢失信息,需要做到重启后可以恢复消息队列,一般采用持久化机制 ActiveMQ持久化机制有JDBC、AMQ、kahaDB、LevelDB 1、AMQ:一种文件存储形式,它具有写入速度快和容易恢复的特点,消息存储在一个个文件中,文件的默认大小为32M,当一个存储文件的消息全部被消费,该文件将被标识为可删除,在下一个清楚阶段,这个文件被删除,适用于ActiveMQ5.3之前的版本 2、KahaDB(默认,目前主流): kahaDB是目前默认的存储方式,可用于任何场景,提高性能和恢复能力 消息存储适用一个事务日志和仅仅用一个索引文件来存储它的所有地址,数据被追加到data logs中,当不再需要log文件中的数据的时候,log文件会被丢弃释放空间。activemq.xml文件中标签可配置存储目录地址 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ea28a5f64468434abb96ce1d4dd4a1fa.png) **db-.log** KahaDB在存储消息到预定义大小的数据记录文件中,文件命名为db-.log。当数据文件已经满时,一个新的文件会随之创建,number数值也会随之递增,它随着消息数量的增多,每个32M一个文件,文件名按照数字进行编号,如db-1.log、db-2.log、db-3.log..... 。当不再有引用到数据文件中的任何消息时,文件会被删除或归档。

db.data 该文件包含了持久化的BTree索引,索引了消息数据记录中的消息,它是消息的索引文件,本质上是B-Tree(B树),使用B-Tree作为索引指向db-.log里面存储的消息。

db.free 当前db.data文件里面哪些页面是空闲的,文件具体内容是所有空闲页的ID

db.redo 用来进行消息恢复,如果KahaDB消息存储在强制退出启动,用于恢复BTree索引

lock 文件锁,表示当前获得kahaDB读写权限的broker

3、JDBC消息存储(消息基于JDBC存储)
使用步骤:
(一)添加数据库的驱动包到lib文件夹
(二)jdbcPersistenceAdapter配置
在这里插入图片描述
(三)数据库连接池配置
在这里插入图片描述

(四)建仓SQL和建表说明
三张表(ACTIVEMQ_MSGS、ACTIVEMQ_ACKS、ACTIVEMQ_LOCK)
Queue:在没有消费者消费的情况下会将消息保存到ACTIVEMQ_MSGS表中,只要任意一个消费者已经消费过了,消费之后这些消息将会立即被删除。
Topic:先启动消费订阅然后再生产的情况会将消息保存到ACTIVEMQ_ACKS

ACTIVEMQ_MSGS
在这里插入图片描述
ACTIVEMQ_ACKS
在这里插入图片描述
ACTIVEMQ_LOCK
在这里插入图片描述

4、LevelDB消息存储
ActiveMQ5.8之后引进,它和KahaDB非常相似,也是基于文件的本地数据库存储形式,但是它提供比KahaDB更快的持久性。但它不使用自定义B-Tree实现来索引预写日志,而是使用基于LevelDB的索引

5、JDBC Message store with ActiveMQ Journal
这种方式克服了JDBC Store的不足,JDBC每次消息过来,都需要去写库和读库。
ActiveMQ Journal,使用高速缓存写入技术,大大提高了性能。
当消费者的消费速度能够及时跟上生产者消息的生产速度时,Journal文件能够大大减少写入到DB中的消息。
在这里插入图片描述

ActiveMQ多节点集群

在这里插入图片描述
zookeeper+replicated-leveldb-store主从集群步骤
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值