文章目录
消息队列中间ActiveMQ高级应用
一、MQ应用场景分析
MQ(Message Queue)是分布式系统中的重要组件,主要解决异步消息、应用解耦、流量削峰等问题;从而实现高性能、高可用的架构。
常用的消息中间件:ActiveMQ、RabbitMQ、Kafka、MetaMQ
1. 异步处理
大大缩短响应时间
2. 应用解耦
3. 流量削峰
用前端入消息队列:可以控制活动人数、可以缓解短时间内高流量压垮应用
二、JMS消息模型( Java Message Service )(Java消息服务)
1. 点对点模型(P2P)
包含3个角色:消息队列(Queue)、发送者(Sender)、接收者(Receiver)
【如果希望每个消息都会被成功处理,使用P2P模型】
特点:
- 每个消息只有一个消费者,消息一旦被消费,机会从队列中消失。
- 发送者和接收之间没有依赖关系,接收者未接收不会影响发送者。
- 接收者接收到消息的时候,需要向队列进行反馈。
2. 发布订阅模型(Pub/Sub)
包含3个角色:主题(Topic)、发布者(Publisher)、订阅者(Subscriber)
特点:
-
每个消息都可以有多个消费者。
-
发布者和订阅者有时间上的依赖,订阅者必须在创建一个订阅之后,才能消费发布者的消息。(就和期刊的“订阅”一样,你不订阅就没法看)
(为了缓和时间上的依赖,JMS允许订阅者创建一个持久化的订阅)
-
为了消费信息,订阅者必须一直处于运行的状态。
三、ActiveMQ Topic消息失败重发机制
1. JMS消息确认机制
JMS中的Session接口中定义的常量:
2. 代码实现
思路:
消息消费端在创建Session对象时,需要指定应答模式为手动确认,当消费者获取到消息,并成功处理后调用message.acknowledge()方法进行应答,通知Broker消费成功,如果处理过程中出现异常,需要调用session.remove()方法通知Broker重发消息,默认最多重发6次。
详见 “ maven项目的创建.md ” 文件
四、ActiveMQ Topic消息持久化订阅
1. 持久化到文件(默认)
详见 “ maven项目的创建.md ” 文件,第4点;
2. 持久化到数据库(mysql)
详见 “ maven项目的创建.md ” 文件
3. 测试持久化效果
详见 “ maven项目的创建.md ” 文件
五、zookeeper+activemq集群实现高可用
使用ZooKeeper实现的Master-Slave是实现方式(主从实现方式),是对ActiveMQ记性高可用的一种有效的解决方案。高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQ Broker节点。只有其中的一个Broker可以对外提供服务(也就是Master节点<主节点>),其他的Broker处于待机状态,被视为Slave(从节点)。如果Master因故障不能提供服务,则利用ZooKeeper的内部选举机制从Slave中选举出一个Broker中档Master节点,继续对外提供服务。通过zookeeper+activeMQ是实现的集群,可以有效的排除单点故障引起的服务中断。
1. 环境准备
- 准备3台虚拟机,IP分别为:192.168.112.128、192.168.112.129、192.168.112.130
- 提供jdk的安装包
- 提供zookeeper和activeMQ的安装包(Linux下的安装包)
待续…