ActiveMQ消息队列

来源:互联网 发布:数据报送的重要性 编辑:程序博客网 时间:2024/06/09 16:39

ActiveMQ介绍

ActiveMQ Apache出品,最流行的,能力强劲的开源消息总线。

ActiveMQ安装

ActiveMQ要求JDK1.5以上,推荐1.6以上版本。

安装完JDK后,从 http://activemq.apache.org/download.html下载MQ的最新版本。解压后,可以看到MQ目录下有以下文件和目录。

ActiveMQ目录结构

目录结构介绍如下:

bin,放置启动、停止、注册服务等命令文件。

conf,配置文件,包括brokerjettylog等配置文件。

data,放置消息缓存(kahadb)jettyjsp编译后的classAMQ日志等文件。

docs,帮助文档

examples,应用示例

lib,依赖的jar

webappsAMQ下的web应用,包括web consolefile server

webapps-demodemo应用,默认不能访问,如需访问需要在conf/jetty.xml文件中配置。

activemq-all-5.10.1.jarAMQ的开发用的jar

其它文件,包括licensenoticereadme

JMS介绍

JMS(Java Message Service) Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业应用的开发。它支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅(Pub/Sub)模型。P2P模型规定了一个消息只能有一个接收者;Pub/Sub模型允许一个消息可以有多个接收者。

对于点到点模型,消息生产者产生一个消息后,把这个消息发送到一个Queue(队列)中,然后消息接收者再从这个Queue中读取,一旦这个消息被一个接收者读取之后,它就在这个Queue中消失了,所以一个消息只能被一个接收者消费。

与点到点模型不同,发布/订阅模型中,消息生产者产生一个消息后,把这个消息发送到一个Topic中,这个Topic可以同时有多个接收者在监听,当一个消息到达这个Topic之后,所有消息接收者都会收到这个消息。

 

ActiveMQ优势

·多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

·完全支持JMS1.1J2EE 1.4规范(持久化,XA消息,事务)

·Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性

·完全支持JMS1.1J2EE 1.4规范(持久化,XA消息,事务)

·通过了常见J2EE服务器(Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上

·支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

·从设计上保证了高性能的集群,客户端-服务器,点对点

·支持Ajax

·支持与Axis的整合

·可以很容易得调用内嵌JMS provider,进行测试

场景适用

适合场景:消息中间件一般被用在异步消息通信、整合多个系统的场景。

不适合场景:如果系统生态环境很单一,无需跟其他第三方进行通信,或是虽然要简单的通信但是数据量不大,业务不太复杂,其实个人认为是无需用MQ这种重量级的解决方案的,直接暴露接口就好了。

ActiveMQ后台  

浏览器打开http://192.168.202.128:8161/admin


输入用户名、密码,登录到后台界面。

 

点对点通信模式

一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。这里,生产者知道消费者的队列,并直接将消息发送到消费者的队列。这种模式被概括为:

只有一个消费者将获得消息

生产者不需要在接收者消费该消息期间处于运行状态,接收者也同样不需要在消息发送时处于运行状态。

每一个成功处理的消息都由接收者签收

生产者生产消息

 

消费者消费消息

 

在点对点通信模式中,消息只要没有被消费,一直是挂起的状态,直到被消费者消费。

而在发布/订阅(Pub/Sub)模型中,如果消费者没有订阅主题或没有启动服务,则获得不到消息。

发布/订阅模型

支持向一个特定的消息主题发布消息。多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。这种模式好比是匿名公告板。这种模式被概括为:

多个消费者可以获得消息

在发布者和订阅者之间存在时间依赖性。发布者需要建立一个订阅(subscription),以便客户能够购订阅。订阅者必须保持持续的活动状态以接收消息,除非订阅者建立了持久的订阅。在那种情况下,在订阅者未连接时发布的消息将在订阅者重新连接时重新发布。

 

Java代码实现

编程的结构

 消息产生者向JMS发送消息的步骤

(1)创建连接使用的工厂类JMS ConnectionFactory

(2)使用管理对象JMS ConnectionFactory建立连接Connection

(3)使用连接Connection建立会话Session

(4)使用会话Session和管理对象Destination创建消息生产者MessageSender

(5)使用消息生产者MessageSender发送消息

 消息消费者从JMS接受消息的步骤

(1)创建连接使用的工厂类JMS ConnectionFactory

(2)使用管理对象JMS ConnectionFactory建立连接Connection

(3)使用连接Connection建立会话Session

(4)使用会话Session和管理对象Destination创建消息消费者MessageReceiver

(5)使用消息消费者MessageReceiver接受消息,需要用setMessageListenerMessageListener接口绑定到MessageReceiver

消息消费者必须实现了MessageListener接口,需要定义onMessage事件方法。


0 0
原创粉丝点击