ActiveMQ总结 0、写在前面 1、JMS简介(底层实现原理) 2、ActiveMQ简介 3、ActiveMQ安装 4、ActiveMQ术语 5、ActiveMQ应用

Activemq:是一个提供消息队列服务的应用
消息队列:以队列的形式发送消息
发送方、接收方是两个不同应用,也可以是同一个应用的两个不同模块

1JMS简介(底层实现原理)

全称:Java Message Service 中文:Java消息服务。
JMSJava的一套API标准,最初的目的是为了使应用程序能够访问现有的MOM系统(MOMMessage Oriented Middleware的英文缩写,指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。);后来被许多现有的MOM供应商采用,并实现为MOM系统。
基于JMS实现的MOM,又被称为JMS Provider
  1. 什么是消息

消息是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。
消息被发送到队列中。消息队列是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。

1.2 消息队列

消息队列是在消息的传输过程中保存消息的容器。

1.3 常用消息服务应用

1.3.1 ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。

1.3.2 RabbitMQ

RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。开发语言为Erlang。

1.3.3 RocketMQ

由阿里巴巴定义开发的一套消息队列应用服务。

1.4 消息队列应用场景

消息队列的主要特点是异步处理,主要目的是减少请求响应时间解耦。所以主要的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。

1.4.1 异步处理

跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。以注册为例,在很多注册业务中,都需要短信认证手机号、邮件认证邮箱业务;
1)、同步处理时,依次调用注册——>短信接口——>邮箱接口,才能完成注册,一是会影响用户体验,二是一旦接口出现阻塞,会直接影响注册业务完成。
ActiveMQ总结
0、写在前面
1、JMS简介(底层实现原理)
2、ActiveMQ简介
3、ActiveMQ安装
4、ActiveMQ术语
5、ActiveMQ应用
2)、异步处理注册业务,处理效率高
ActiveMQ总结
0、写在前面
1、JMS简介(底层实现原理)
2、ActiveMQ简介
3、ActiveMQ安装
4、ActiveMQ术语
5、ActiveMQ应用

1.4.2 多应用或者多模块解耦

多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,不需要发送方和接收方同时在线。典型应用:异步更新缓存
ActiveMQ总结
0、写在前面
1、JMS简介(底层实现原理)
2、ActiveMQ简介
3、ActiveMQ安装
4、ActiveMQ术语
5、ActiveMQ应用

1.4.3 流量削峰

ActiveMQ总结
0、写在前面
1、JMS简介(底层实现原理)
2、ActiveMQ简介
3、ActiveMQ安装
4、ActiveMQ术语
5、ActiveMQ应用
订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。由于同步通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。
迸发:
  1. 因为某种业务引起的并发问题。秒杀类。用消息队列。或者rediskey.decr
  2. 按阿里的网站,每时每刻都有人访问,可以用负载均衡。(ngnix做反向代理)
1.4.4 日志处理
日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。架构简化如下:
ActiveMQ总结
0、写在前面
1、JMS简介(底层实现原理)
2、ActiveMQ简介
3、ActiveMQ安装
4、ActiveMQ术语
5、ActiveMQ应用

1.4.5 消息驱动的架构(EDA

系统分解为消息队列、消息制造者和消息消费者,一个处理流程可以根据需要拆成多个阶段(Stage),阶段之间用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从队列中获取消息继续处理。

1.4.6 其它应用

应用需要更灵活的耦合方式,如发布订阅,比如可以指定路由规则。
跨局域网,甚至跨城市的通讯,比如北京机房与广州机房的应用程序的通信。

2ActiveMQ简介

2.1 ActiveMQ特征

      (1)、多种语言和协议编写客户端,支持Java、C、C++、C#、Ruby、Perl、Python、PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP;
(2)、完全支持JMS1.1和J2EE1.4规范 (持久化,XA消息,事务);
(3)、对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统;
(4)、通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上;
(5)、支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA;
(6)、支持通过JDBC和journal提供高速的消息持久化;
(7)、从设计上保证了高性能的集群,客户端-服务器,点对点;
(8)、支持Ajax;
(9)、支持与Axis的整合;
(10)、可以很容易的调用内嵌JMS provider,进行测试。

3ActiveMQ安装

3.1 下载

登陆ActiveMQ官网: http://activemq.apache.org

ActiveMQ总结
0、写在前面
1、JMS简介(底层实现原理)
2、ActiveMQ简介
3、ActiveMQ安装
4、ActiveMQ术语
5、ActiveMQ应用

3.2 解压

tar -zxvf apache-activemq-5.9.0-bin.tar.gz
注意:如果是linux版本,则先将下载的压缩包上传到linux服务器上,再进行解压即可。本次上课使用的是linux版本。
解压之后的目录结构:
ActiveMQ总结
0、写在前面
1、JMS简介(底层实现原理)
2、ActiveMQ简介
3、ActiveMQ安装
4、ActiveMQ术语
5、ActiveMQ应用

3.3 启动activemq服务

ActiveMQ总结
0、写在前面
1、JMS简介(底层实现原理)
2、ActiveMQ简介
3、ActiveMQ安装
4、ActiveMQ术语
5、ActiveMQ应用

3.4 修改端口

ActiveMQ内置了jetty服务器,如果要修改默认的端口,则编辑/conf/jetty.xml文件,将8161端口改成需求的端口号即可。
ActiveMQ总结
0、写在前面
1、JMS简介(底层实现原理)
2、ActiveMQ简介
3、ActiveMQ安装
4、ActiveMQ术语
5、ActiveMQ应用

3.5 添加activemq环境变量

(1)、编辑用户的.bash_profile文件,vim ~/.bash_profile
(2)、添加activemq的环境变量地址:
 
#activemq
export ACTIVEMQ_HOME=/home/soft/activemq/apache-activemq-5.9.0
export PATH=$PATH:$ACTIVEMQ_HOME/bin
ActiveMQ总结
0、写在前面
1、JMS简介(底层实现原理)
2、ActiveMQ简介
3、ActiveMQ安装
4、ActiveMQ术语
5、ActiveMQ应用
 
(3)、重新加载.bash_profile文件,source ~/.bash_profile
(4)、使用命令activemq restart|stop|start管理应用服务。

4ActiveMQ术语

4.1 Destination(其实就是别名的意思)

目的地,JMS Provider(消息中间件)负责维护,用于对Message进行管理的对象。MessageProducer需要指定Destination才能发送消息,MessageReceiver需要指定Destination才能接收消息。

4.2 Producer

消息提供者,负责向目的地中写入数据。

4.3 Customer|Receiver

消息接收者,负责从目的地中消费【处理|监听|订阅】消息。

4.4 Message

消息,用来封装一次通信的内容。

5ActiveMQ应用

5.1 ActiveMQ常用api

下述API都是接口类型,定义在javax.jms包中,是JMS标准接口定义。ActiveMQ完全实现这一套api标准。

5.1.1 ConnectionFactory

链接工厂, 用于创建链接的工厂类型。

5.1.2 Connection

链接,用于建立访问ActiveMQ连接的类型, 由链接工厂创建。

5.1.3 Session

会话, 一次持久有效、有状态的访问,由链接创建。

5.1.4 Destination & Queue

目的地, 即本次访问ActiveMQ消息队列的地址,由Session会话创建。
interface Queue extends Destination

5.1.5 MessageProducer

消息生成者, 在一次有效会话中, 用于发送消息给ActiveMQ服务的工具,由Session会话创建。

5.1.6 MessageCustomer

消息消费者【消息订阅者,消息处理者】, 在一次有效会话中, 用于ActiveMQ服务中获取消息的工具,由Session会话创建。

5.1.7 Message

消息,在消息传递过程中数据载体对象,是所有消息【文本消息TextMessage,对象消息ObjectMessage等】具体类型的*接口,可以通过会话创建或通过会话从ActiveMQ服务中获取。