消息队列--ActiveMQ

一.消息队列

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规范的一个实现产品,主要用在两个程序之间,或分布式系统中发送消息,进行异步通信。可以用它来解决高并发的问题,或者分布式事务的问题等。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。