ActiveMq总结思维导图
2020-03-11 09:23:20 0 举报
AI智能生成
ActiveMq总结思维导图
作者其他创作
大纲/内容
1.入门概述
前言
为什么要引入消息中间件
什么场景引入消息中间件
。。。
从生活case到实际生产案例
上述问题产生的背景
系统之间直接调用实际工程落地和存在的问题
系统间的接口耦合比较严重
面对大流量时容易被冲垮
等待同步存在性能问题
如何解决
需要有东西来解决上述问题??
是什么
定义
特点
采用异步处理模式
应用系统间的解耦
发送者和接收者不必了解对方,只需要确认消息
发送者和接收者不必同时在线
具体业务
能干嘛
去哪里下
怎么玩
最主要的功能
实现高可用,高性能,可伸缩,易用和安全的企业级面向消息服务的系统
异步消息的消费和处理
控制消息的消费顺序
可以和spring与springboot 整合简化编码
配置集群容错的mq集群
。。。
2.ActiveMQ的安装和控制台
3.Java编码实现ActiveMQ通信
IDEA建立maven工程
POM.xml
JMS编码总体架构
对比回忆以前基础课程JDBC的编码套路
粗说目的地distination队列和主题
两大模式特性
在点对点的消息传递域中,目的地被称为队列(queue)
上手案例
消息生产者
代码
控制台
控制台说明
消息消费者
方式一:同步阻塞方式receive()
方式二:设置监听方式
编码小总结
JMS开发的基本步骤
两种消费方法
在发布订阅消息传递域中,目的地被称为主题(topic)
上手案例
发布主题生产者
订阅主题消费者
先启动消费者后启动生产者,不然发送的消息是废消息
控制台
小总结
两个模式的特性
两大模式的比较
4.JMS规范和落地产品
是什么
JavaEE
JMS
分支主题
分支主题
MQ中间件的其他落地产品
消息队列的详细对比
JMS的组成和特点
JMS privider
实现JMS接口与规范的消息中间件,也就是我们的MQ服务器
JMS producer
消息生产者,创建与发送JMS消息的客户端应用
JMS consumer
消息的消费者,接受与处理JMS消息的客户端应用
JMS message
消息头
JMSdesination
消息发送的目的地,主要是指Queue与Topic
JMSDeliveryMode
JMSExpiration
JMSPriority
JMSMessageID
唯一识别每个消息的表示,由MQ产生
消息体
封装具体消息的数据
五种消息体的格式
分支主题
TextMessage
普通的字符串消息,包含一个string
MapMessage
一个map类型的消息,key为stirng类型,而value 为java的基本类型
BytesMessage
二进制数组消息,包含一个byte[]
StreamMessage
java数据流消息,用标准流操作来顺序的填充或读取
ObjectMessage
对象消息,包含一个可序列化的java对象
发送和接受的消息体类型必须是一致对应的
消息属性
如果需要使用消息头以外的值,那么可以使用消息属性///一种加强型的api
识别/去重/重点标注等操作非常有用的方法
是什么
JMS的可靠性
persistent:持久性
参数设置说明
非持久
持久
默认是持久化的
持久的queue
演示
结论
持久的topic
代码
先启动订阅在启动生产
持久的发布主题生产者
持久的订阅主题消费者
控制台
类似微信公众号的订阅发布
非持久的topic 没有意义,因为发布订阅模式是先启动订阅在启动生成,消息已经被消费了。如果先启动生产者后启动订阅者,消息会被当作废消息
transaction:事务
producer提交时的事务
false
只要执行send就进入到队列中
关闭事务,那第2个签收参数的设置需要有效
true
先执行send再执行commit,消息才被真正的提交到队列中
消息需要批量发送,需要缓存区处理
事务偏生产者/签收偏消费者
Acknowledge:签收
非事务
自动签收(默认)
Session.AUTO_ACKNOWLEDGE
手动签收
客户端调用acknowledge方法手动签收
Session.CLIENT_ACKNOWLEDGE
允许重复消息
Session.DUPS_OK_ACKNOWLEDGE
事务
消费者事务开启,只有commit后才能将全部消息变为已消费,写ack没有作用,即使写了签收也不会签收出队
消息生产者
代码
控制台
消息消费者
代码
控制台
签收与事务的关系
在事务性会话中,当一个事务被成功提交则消息被自动签收。如果事务回滚,则消息会被再次传送
非事务会话中,消息何时被确认取决于创建会话时的应答模式(acknowledgement)
JMS的点对点模式总结
JMS的发布订阅模式总结
非持久订阅
持久订阅
用那个
当所有消息必须被接受,则用持久订阅。当丢失消息能够被容忍,则用非持久订阅
5.ActiveMQ的Broker
是什么
回忆阳哥之前讲解过的redis,不同的conf配置文件模拟不同的实例
嵌入式的Broker
pom.xml
EmbedBroker
队列验证
6.Spring整合ActiveMQ
1.maven修改,需要添加spring支持的jms的包
pom.xml
2.spring配置文件
3.队列
生产者
消费者
4.主题
Spring配置文件,新增主题topic
applicationContext.xml
生产者
同队列代码不变
消费者
同队列代码不变
5.在spring中里边实现消费者不启动,直接通过配置监听完成
说明
spring配置文件
applicationContext.xml
需要写一个类来实现监听
只需要启动生产者,不需要启动消费者,自动完成监听记录
7.SpringBoot整合ActiveMQ
队列
队列生产者
1.新建maven工程并设置包名类名
工程名
包名
2.pom.xml
3.application.yum
4.配置bean
类似Spring框架的applicationContext.xml文件
5.Queue_Produce
6.主启动类MainApp_Produce
7.测试单元
8.新需求:要求每隔3秒往MQ推送消息,
以下定时发送case,案例修改
修改Queue_Produce新增定时投递方法
修改主启动类
直接开始主启动类,间隔发消息OK
队列消费者
1.新建maven工程并设置包名类名
2.pom.xml
3.application.yml
4.Queue_Consumer
5.主启动类
发布订阅
Topic生产者
1.新建maven工程并设置包名类名
工程名
包名
2.pom.xml
3.application.yum
4.配置bean
类似Spring框架的applicationContext.xml文件
5.Topic_Produce
6.主启动类MainApp_Produce
Topic消费者
1.新建maven工程并设置包名类名
2.pom.xml
3.application.yml
4.Topic_Consumer
5.主启动类
模拟两个消费者
8.ActiveMQ传输协议
面试题
默认的61616端口怎么修改
你生产上的链接协议如何配置的?使用TCP么?
官网
分支主题
各种主要协议
是什么
有那些
1.TCP默认的
2.NIO
3.AMQP协议
4.stomp协议
5.SSL
6.mqtt协议
扩展Github
7.ws协议
8.小总结
NIO案例演示
官网
http://activemq.apache.org/configuring-transports
说明
修改配置文件activemq.xml
生产与消费两端的协议代码修改
分支主题
运行验证
NIO案例演示增强
上述NIO性能不错了,如何进一步优化?
问题
UPI格式头以“nio”开头,表示这个端口使用以TCP为基础的NIO网络IO模型
但是这样的设置方式,只能使这个端口支持openwire协议。
那么我们怎么即让这个端口支持NIO网络io模型,又让它支持多个协议呢?
解决
使用auto关键字
使用“+”符号来为端口设置多种特性
如果我们即需要某一个端口支持NIO网络io模型,又需要它支持多种协议
9.ActiveMQ的消息存储与持久化
官网
http://activemq.apache.org/persistence
是什么
面试题
ActiveMQ持久化机制
回忆阳哥讲的redis持久化机制
说明
一句话,MQ服务器宕机,消息不会丢失的机制
有哪些
ActiveMQ Message Store (了解)
基于文件的存储方式,是以前的默认消息存储,现在不用了
KahaDB 消息存储(默认)
基于日志文件,从ActiveMQ5.4开始默认的持久化插件
官网
kahaDB官网
验证
说明
http://activemq.apache.org/kahadb
kahaDB的存储原理
JDBC 消息存储
消息基于JDBC存储的
LevelDB消息存储(了解)
JDBC Message store with ActiveMQ Journal
JDBC消息存储
1.MQ+Mysql
2.添加mysql数据库的驱动包到lib文件夹
3.jdbcPersistanceAdapter配置
4.数据库连接池配置
5.建库建表说明
建一个名为activemq的数据库
三张表的说明
activemq_msgs
activemq_acks
activemq_lock
如果新建数据库OK+上述配置OK+代码运行OK,三张表会自动建立
万一情况,手动建表sql如果配置不好需要手动,应急
6.代码运行验证
一定要开启持久化
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
队列
生产者
消费者
topic
生产者
消费者
7.数据库情况
一旦运行生产code
点对点
发布订阅
mysql
queue
在运行消费看看表msgs数据的变化情况
topic
先启动消费者订阅在运行生产者,看acks
8.小总结
9.开发有坑
JDBC Message store with ActiveMQ Journal
是什么
说明
配置
重启配置文件激活
运行
ActiveMQ持久化机制小总结
10.ActiveMQ多节点集群
面试题
引入消息队列之后该如何保证其高可用
是什么
基于zookeeper和leveldb搭建activemq集群
集群仅提供主备方式的高可用集群功能,避免单点故障
zookeeper+replicated-leveldb-store的主从集群
三种集群方式的对比
基于共享文件系统kahadb默认
基于JDBC
基于可复制的LevelDB
本次案例采用zk+levelDB
共享文件系统
是什么
http://activemq.apache.org/replicated-leveldb-store
官网集群原理图
解释
部署规划和步骤
1.环境和版本
2.关闭防火墙并保证win可以ping通过activemq服务器
3.要求具备zk集群并可以成功启动
参考阳哥之前讲解过的zookeeper??没看过
4.集群部署规划列表
5.创建3台集群目录
6.修改管理控制台端口
7.hostname名字映射
8.activemq集群配置
01/02/03路径
3个节点的BrokerName要求完全一致
3个节点的持久化配置
9.修改各个节点的消息端口
10.按照顺序启动3个ActiveMQ节点,
到这步前题是zk集群已经成功启动运行
分支主题
11.zk集群的节点状态说明
3台zk集群连接任意一台
查看master
集群可用性测试
干掉一台Activemq,它会自动切换到另一个活着的
代码
11.高级特性和大厂长考重点
1.引入消息队列之后该如何保证其高可用性
2.异步投递Async Sends
异步投递
分支主题
说明
对于一个slow consumer ,使用同步发送消息可能出现producer堵塞等情况,慢消费者适合使用异步发送
是什么
官网配置
面试追问
异步发送如何确认发送成功?
分支主题
3.延时投递和定时投递
分支主题
官网说明
四大属性
粗说cron
案例演示
分支主题
分支主题
代码
分支主题
分支主题
4.分发策略(没讲)
5.Activemq消费重试机制
生产案例面试题
具体那些情况会引起消息重发
请说说消息的重发时间间隔和重发次数么
有毒消息PoisonACK谈谈你的理解
记得和学生讲解2次,上述回答
官网
分支主题
属性说明
案例验证与讲解
分支主题
分支主题
分支主题
分支主题
整合Spring后如何使用,假如工作中需要
6.死信队列
分支主题
是什么
死信队列的使用:处理失败的消息
activemq死信队列的配置介绍
分支主题
分支主题
配置案例
自动删除过期消息
存放非持久消息到死队列中
7.如何保证消息不被重复消费呢?幂等性问题?
0 条评论
下一页
为你推荐
查看更多