(2)消息中间件的初始认识和安装
1.什么是消息中间件
消息中间件是值利用高效可靠的消息传递机制
进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型
,可以在分布式架构下扩展进程之间的通信。
2.消息中间件能做什么
消息中间件主要解决的就是分布式系统之间消息传递的问题
,它能够屏蔽各种平台以及协议之间的特性,实现应用程序之间的协同。
举个非常简单的例子,就拿一个电商平台的注册功能来简单分析下,用户注册这一个服务,单只是 insert 一条数据到数据库里面就完事了,还需要发送激活邮件、发送新人红包或者积分、发送营销短信等一系列操作。假如说这里面的每一个操作,都需要消耗 1s,那么整个注册过程就需要耗时 4s 才能响应给用户。
但是我们从注册这个服务可以看到,每一个子操作都是相对独立的,同时,基于领域划分以后,发送激活邮件、发送营销短信、赠送积分及红包都属于不同的子域。所以我们
可以对这些子操作进行来实现异步化执行,类似于多线程并行处理的概念。
如何实现异步化呢?用多线程能实现吗?多线程当然可以实现,只是,消息的持久化、消息的重发这些条件,多线程并不能满足
。所以需要借助一些开源中间件来解决。而分布式消息队列就是一个非常好的解决办法,引入分布式消息队列以后,架构图就变成这样了(下图是异步消息队列的场景)。通过引入分布式队列,就能够大大提升程序的处理效率,并且还解决了各个模块之间的耦合问题
-
分布式消息队列的第一个解决场景【异步处理】
-
消息队列的方式可以很好的缓解高流量的问题
通过分布式消息队列来实现流量整形,比如在电商平台的秒杀场景下,流量会非常大,通过消息队列的方式可以很好的缓解高流量的问题
用户提交过来的请求,先写入到消息队列。消息队列是有长度的,如果消息队列长度超过指定长度,直接抛弃,秒杀的具体核心处理业务,接收消息队列中消息进行处理,这里的消息处理能力取决于消费端本身的吞吐量
在弱一致性事务模型中,可以采用分布式消息队列的实现最大能力通知方式来实现数据的最终一致性
3.ActiveMQ 简介
ActiveMQ 是完全基于 JMS 规范实现的一个消息中间件产品。是 Apache 开源基金会研发的消息中间件。ActiveMQ主要应用在分布式系统架构中,帮助构建高可用、高性能、可伸缩的企业级面向消息服务的系统
- 多语言和协议编写客户端语言:java/C/C++/C#/Ruby/Perl/Python/PHP
应用协议支持: openwire/stomp/REST/ws/notification/XMPP/AMQP - 完全支持 jms1.1 和 J2ee1.4 规范
- 对 spring 的支持,ActiveMQ 可以很容易内嵌到 spring模
4.ActiveMQ 安装
详细的入门教程以及安装教程的可以参考: http://activemq.apache.org/getting-started.htm
-
登录到 http://activemq.apache.org/activemq-5150-release.html,找到 ActiveMQ 的下载地址
-
直 接 copy 到 linux服务器上通过
tar -zxvf apache-activeMQ.tar.gz -
启动运行
a) 普通启动
到 bin 目录下, sh activemq start
b) 启 动 并 指 定 日 志 文 件
sh activemq start > /tmp/activemqlog
c)或者带控制台的启动方式
sh activemq console -
检查是否已启动
ActiveMQ默认采用 61616 端口提供 JMS服务,使用 8161端口提供管理控制台服务,执行以下命令可以检查是否成功启动 ActiveMQ 服务
netstat -an|grep 61616 -
通过 http://localhost:8161 访问activeMQ 管理页面 ,默认帐号密admin/admin
启动界面如下:
-
关闭 ActiveMQ,
sh activemq stop