1.简介:ActiveMQ是一个消息队列应用服务器,支持JMS规范。
1.1.JMS介绍:
全称:Java Message Service ,即为Java消息服务,是一套java消息服务的API标准。(标准即接口)
实现了JMS标准的系统,称之为JMS Provider。
1.2.消息队列:消息队列是在消息的传输过程中保存消息的容器,提供一种不同进程或者同一进程不同线程直接通讯的方式。
1.3.ActiveMQ作用:
(1)实现两个不同应用(程序)之间的消息通讯。
(2)实现同一个应用,不同模块之间的消息通讯。(确保数据发送的稳定性)
2.入门示例
需求:使用ActiveMQ实现消息队列模型。
2.1.配置步骤说明
(1)搭建ActiveMQ消息服务器。
(2)创建一个java项目。
(3)创建消息生产者,发送消息。
(4)创建消息消费者,接收消息。
2.2.搭建ActiveMQ消息服务器
(1)下载ActiveMQ,上传至Linux
(2)安装到/usr/local/activemq目录下
(3)启动ActiveMQ服务器
(4)浏览器访问ActiveMQ管理页面
2.2.创建java项目,导入jar包
2.3.创建消息生成器,发送消息
2.3.1.JMS常用api说明
(1)ConnectionFactory:链接工厂, 用于创建链接的工厂类型。
(2)Connection:链接,用于建立访问ActiveMQ连接的类型, 由链接工厂创建。
(3)Session:会话, 一次持久有效、有状态的访问,由链接创建。
(4)Destination、Queue、Topic
目的地, 即本次访问ActiveMQ消息队列的地址,由Session会话创建。
(4.1)interface Queue extends Destination
(4.2)Queue:队列模型,只有一个消费者。消息一旦被消费,默认删除。
(4.3)Topic:主题订阅中的消息,会发送给所有的消费者同时处理。
(5)Message:消息,在消息传递过程中数据载体对象,是所有消息【文本消息TextMessage,对象消息ObjectMessage等】具体类型的顶级接口,可以通过会话创建或通过会话从ActiveMQ服务中获取。
(6)MessageProductor:消息生成者, 在一次有效会话中, 用于发送消息给ActiveMQ服务的工具,由Session会话创建。
(7)MessageCustomer:
消息消费者【消息订阅者,消息处理者】, 在一次有效会话中, 用于ActiveMQ服务中获取消息的工具,由Session会话创建。
我们定义的消息生产者和消费者,都是基于上面API实现的。
2.3.2.代码编写思路:
(1)创建MyProductor类,定义sendMessage方法
(2)编写一个测试类测试
(3)测试
(4)创建消费消息者,消费信息
2.3.3.ActiveMQ监听器
使用ActiveMQ监听器来监听队列,可以持续消费消息。
2.3.3.1配置步骤说明:
(1)创建一个监听器对象。
(2)修改消费者代码,加载监听器。
2.3.4.ActiveMQ服务模式
2.3.4.1.PTP模式(point to point)
消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。
消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。
Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费、其它的则不能消费此消息了。
当消费者不存在时,消息会一直保存,直到有消费消费
我们的入门示例,就是采用的这种PTP服务模式。
2.3.4.2.TOPIC(主题订阅模式)
消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。
和点对点方式不同,发布到topic的消息会被所有订阅者消费。
当生产者发布消息,不管是否有消费者。都不会保存消息
所以,主题订阅模式下,一定要先有消息的消费者(订阅者),后有消息的生产者(发布者)。