一.消息队列
1.概述
- 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。
- 实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。
- 目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。
2.消息队列应用场景
(1)异步处理
场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法如下两种:
1)串行方式
将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端。
简图:
2)并行方式
将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间。
原理图:
3)引入消息队列,将不是必须的业务逻辑,异步处理。
改造后的架构如下:
二.ActiveMQ
1.JMS简介
(1)JMS即Java消息服务,是JavaEE的13规范之一,是一套面向消息中间件(MOM)的应用程序接口。用在两个程序之间,或分布式系统中发送消息,进行异步通信。
(2)JMS使我们能够通过消息收发服务(也可以称为,消息中介程序或路由器)从一个JMS客户机向另一个JMS客户机发送消息。消息是JMS中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,消息可分为多种,它们分别携带:简单文本消息、可序列化的对象、属性集合、字节流、原始值流、无有效负载消息。
2.ActiveMQ简介
ActiveMQ出身名门,是Apache门下的最流行的,能力强劲的开源消息总线。
完全支持JMS1.1和J2EE1.4规范的JMS Provide实现。它从设计上保证了高性能的集群,当然实现了JMS的P2P与PubSub两种开发模式。
3.P2P开发模式实战
(1)并导入ActiveMQ的核心jar包
(2)创建消息生产者类:JMSProducer
用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。
(3)创建消息消费者类:JMSConsumer
4.PubSub开发模式实战
P2P的模式相当于一个消息生产者一个消费者,PubSub中可以有一个消息发布者多个消息订阅者,开发与P2P几乎一样,只是将createQueue(创建消息队列)改为了createTopic(创建主题);生产消息改为了发布消息;接收消息改为了订阅消息
5.总结
ActiveMQ是JMS规范的一个实现产品,主要用在两个程序之间,或分布式系统中发送消息,进行异步通信。可以用它来解决高并发的问题,或者分布式事务的问题等。