从 JMS 规范来了解 ActiveMQ

版权声明: https://blog.csdn.net/Dongguabai/article/details/86503102

相关博客:

新手也能看懂,消息队列其实很简单

关于消息中间件

什么是消息中间件

消息中间件是指利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程之间的通信(当然也可以基于 RPC 调用)。

消息中间件能够做什么

消息中间件主要解决的就是分布式系统之间消息传递的问题,它能够屏蔽各种平台以及协议之间的特性,实现应用程序之间的协同。举个非常简单的例子,就拿一个电商平台的注册功能来简单分析下,用户注册这一个服务,不单单只是 insert 一条数据到数据库里面就完事了,还需要发送激活邮件、发送新人红包或者积分、发送营销短信等一系列操作。假如说这里面的每一个操作,都需要消耗 1s,那么整个注册过程就需要耗时 4s 才能响应给用户。

但是我们从注册这个服务可以看到,每一个子操作都是相对独立的,同时,基于领域划分以后,发送激活邮件、发送营销短信、赠送积分及红包都属于不同的子域。所以我们可以对这些子操作进行来实现异步化执行,类似于多线程并行处理的概念。

如何实现异步化呢?用多线程能实现吗?多线程当然可以实现,只是,消息的持久化、消息的重发这些条件,多线程并不能满足。所以需要借助一些开源中间件来解决。而分布式消息队列就是一个非常好的解决办法,引入分布式消息队列以后,架构图就变成这样了(下图是异步消息队列的场景)。通过引入分布式队列,就能够大大提升程序的处理效率,并且还解决了各个模块之间的藕合问题:

这个也是分布式消息队列解决的第一个场景:异步处理。

我们再来展开一种场景,通过分布式消息队列来实现流量整形,比如在电商平台的秒杀场景下,流量会非常大。通过消息队列的方式可以很好的缓解高流量的问题:

用户提交过来的请求,先写入到消息队列。消息队列是有长度的,如果消息队列长度超过指定长度消息队列长度,则直接抛弃。

秒杀的具体核心处理业务,接收消息队列中消息进行处理,这里的消息处理能力取决于消费端本身的吞吐量。

当然,消息中间件还有更多应用场景,比如在弱一致性事务模型中,可以采用分布式消息队列的实现最大能力通知方式来实现数据的最终一致性等等。

ActiveMQ 简介

 ActiveMQ 是完全基于 JMS 规范实现的一个消息中间件产品。是 Apache 开源基金会研发的消息中间件。ActiveMQ 主要应用在分布式系统架构中,帮助构建高可用、高性能、可伸缩的企业级面向消息服务的系统。

ActiveMQ特性
1.多语言和协议编写客户端
  语言:java/C/C++/C#/Ru by/Pert/Python/PH P
  应用协议:
  openwire/stomp/REST/ws/notification/XMPP/AMQP
2.完全支持 jms1.1 和 J2ee1.4 规范
3.对 Spring 的支持,ActiveMQ 可以很容易内嵌到 Spring 模块中

ActiveMQ 安装

进入 http://activemq.apache.org/activemq-5150-release.html 进行下载并上传至 Linux 系统:

解压:

tar -zxvf 

启动:

ActiveMQ 说白了就是一个 Web 程序。可以在浏览器看到相应的控制台,默认端口号是 8161。

首次进入需要账号密码:admin/admin:

ActiveMQ 默认采用 61616 端口提供 JMS 服务,使用 8161 端口提供管理控制台服务,执行以下命令可以检查是否成功启动ActiveMQ 服务:

netstat -an|grep 61616

 关闭 ActiveMQ:

sh activemq stop

什么是 JMS

Java 消息服务(Java Message Service)是 Java 平台中关于面向消息中间件的 API,用于在两个应用程序之间,或者分布式系统中发送消息,进行异步通信。

JMS 是一个与具体平台无关的 API,绝大多数 MOM(Message Oriented Middleware)(面向消息中间件)提供商都对JMS 提供了支持。ActiveMQ 就是其中一个实现。

什么是 MOM

MOM 是面向消息的中间件,使用消息传送提供者来协调消息传送操作。MOM 需要提供 API 和管理工具。客户端使用 API 调用,把消息发送到由提供者管理的目的地。在发送消息之后,客户端会继续执行其他工作,并且在接收方收到这个消息确认之前,提供者一直保留该消息。

MOM 的特点:
1.消息异步接收,发送者不需要等待消息接受者响应;
2.消息可靠接收,确保消息在中间件可靠保存。只有接收方收到后才删除消息;

JMS 规范

JMS 规范的目的是为了使得 Java 应用程序能够访问现有 MOM(消息中间件)系统,形成一套统一的标准规范,解决不同消息中间件之间的协作问题。在创建 JMS 规范时,设计者希望能够结合现有的消息传送的精髓,比如说:

1.不同的消息传送模式或域,例如点对点消息传送和发布 /订阅消息传送
2.提供于接收同步和异步消息的工具
3.对可靠消息传送的支持
4.常见消息格式,例如流、文本和字节

JMS 体系结构:

参考资料:

https://blog.csdn.net/shandian534/article/details/8372822

猜你喜欢

转载自blog.csdn.net/Dongguabai/article/details/86503102