消息队列中间ActiveMQ高级应用

消息队列中间ActiveMQ高级应用

一、MQ应用场景分析

​ MQ(Message Queue)是分布式系统中的重要组件,主要解决异步消息、应用解耦、流量削峰等问题;从而实现高性能、高可用的架构。

常用的消息中间件:ActiveMQ、RabbitMQ、Kafka、MetaMQ

1. 异步处理

在这里插入图片描述 大大缩短响应时间

2. 应用解耦

在这里插入图片描述

3. 流量削峰

在这里插入图片描述
用前端入消息队列:可以控制活动人数、可以缓解短时间内高流量压垮应用

二、JMS消息模型( Java Message Service )(Java消息服务)

1. 点对点模型(P2P)

包含3个角色:消息队列(Queue)、发送者(Sender)、接收者(Receiver)

【如果希望每个消息都会被成功处理,使用P2P模型】

特点:

  1. 每个消息只有一个消费者,消息一旦被消费,机会从队列中消失。
  2. 发送者和接收之间没有依赖关系,接收者未接收不会影响发送者。
  3. 接收者接收到消息的时候,需要向队列进行反馈。

2. 发布订阅模型(Pub/Sub)

包含3个角色:主题(Topic)、发布者(Publisher)、订阅者(Subscriber)

扫描二维码关注公众号,回复: 9304198 查看本文章

特点:

  1. 每个消息都可以有多个消费者。

  2. 发布者和订阅者有时间上的依赖,订阅者必须在创建一个订阅之后,才能消费发布者的消息。(就和期刊的“订阅”一样,你不订阅就没法看)

    (为了缓和时间上的依赖,JMS允许订阅者创建一个持久化的订阅)

  3. 为了消费信息,订阅者必须一直处于运行的状态。

三、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. 环境准备

  1. 准备3台虚拟机,IP分别为:192.168.112.128、192.168.112.129、192.168.112.130
  2. 提供jdk的安装包
    在这里插入图片描述
  3. 提供zookeeper和activeMQ的安装包(Linux下的安装包)
    在这里插入图片描述
    待续…
发布了92 篇原创文章 · 获赞 49 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Xxacker/article/details/89702913