天天看点

ActiveMQ 即时通讯服务 浅析

<b>一、 </b><b>概述与介绍</b><b></b>

<b></b>

<b>二、 </b><b>特性</b><b></b>

1、 多种语言和协议编写客户端。语言: Java、C、C++、C#、Ruby、Perl、Python、PHP。应用协议:OpenWire、Stomp REST、WS Notification、XMPP、AMQP 2、完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务) 3、对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性 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,进行测试

<b>三、 </b><b>安装</b>

开发环境: System:Windows JDK:1.6+ IDE:eclipse apache ActiveMQ 5.8
<a href="http://hoojo.cnblogs.com/">http://hoojo.cnblogs.com/</a>
2、 解压apache-activemq-5.8.0.zip即可完成ActiveMQ的安装 3、 解压后目录结构如下
ActiveMQ 即时通讯服务 浅析
+bin (windows下面的bat和unix/linux下面的sh) 启动ActiveMQ的启动服务就在这里 +conf (activeMQ配置目录,包含最基本的activeMQ配置文件) +data (默认是空的) +docs (index,replease版本里面没有文档) +example (几个例子) +lib (activeMQ使用到的lib) +webapps (系统管理员控制台代码) +webapps-demo(系统示例代码) -activemq-all-5.8.0.jar (ActiveMQ的binary) -user-guide.html (部署指引) -LICENSE.txt -NOTICE.txt -README.txt 其他文件就不相信介绍了,搞Java的应该都知道干什么用的。 你可以进入bin目录,使用activemq.bat双击启动(windows用户可以选择系统位数,如果你是linux的话,就用命令行的发送去启动),如果一切顺利,你就会看见类似下面的信息:
ActiveMQ 即时通讯服务 浅析
如果你看到这个,那么恭喜你成功了。如果你启动看到了异常信息: Caused by: java.io.IOException: Failed to bind to server socket: tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireformat.maxFrameSize=104857600 due to: java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind 那么我告诉你,很不幸,你的端口被占用了。接下来你大概想知道是哪个程序占用了你的端口,并kill掉该进程或服务。或者你要尝试修改ActiveMQ的默认端口61616(ActiveMQ使用的默认端口是61616),在大多数情况下,占用61616端口的是Internet Connection Sharing (ICS) 这个Windows服务,你只需停止它就可以启动ActiveMQ了。
ActiveMQ 即时通讯服务 浅析
其中在导航菜单中,Queues是队列方式消息。Topics是主题方式消息。Subscribers消息订阅监控查询。Connections可以查看链接数,分别可以查看xmpp、ssl、stomp、openwire、ws和网络链接。Network是网络链接数监控。Send可以发送消息数据。 当然你还可以用绝对的文件目录方式:activemq.bat xbean:file:D:/mq/conf/activemq-demo.xml
ActiveMQ 即时通讯服务 浅析
ActiveMQ 即时通讯服务 浅析

<b>四、 </b><b>消息示例</b><b></b>

<b>JMS </b><b>公共</b> <b>点对点域</b> <b>发布/订阅域</b> ConnectionFactory QueueConnectionFactory TopicConnectionFactory Connection QueueConnection TopicConnection Destination Queue Topic Session QueueSession TopicSession MessageProducer QueueSender TopicPublisher MessageConsumer QueueReceiver TopicSubscriber (1)、点对点方式(point-to-point) 点对点的消息发送方式主要建立在 Message Queue,Sender,reciever上,Message Queue 存贮消息,Sneder 发送消息,receive接收消息.具体点就是Sender Client发送Message Queue ,而 receiver Cliernt从Queue中接收消息和"发送消息已接受"到Quere,确认消息接收。消息发送客户端与接收客户端没有时间上的依赖,发送客户端可以在任何时刻发送信息到Queue,而不需要知道接收客户端是不是在运行 (2)、发布/订阅 方式(publish/subscriber Messaging) 发布/订阅方式用于多接收客户端的方式.作为发布订阅的方式,可能存在多个接收客户端,并且接收端客户端与发送客户端存在时间上的依赖。一个接收端只能接收他创建以后发送客户端发送的信息。作为subscriber ,在接收消息时有两种方法,destination的receive方法,和实现message listener 接口的onMessage 方法。
2、ActiviteMQ接收和发送消息基本流程
ActiveMQ 即时通讯服务 浅析
发送消息的基本步骤: (1)、创建连接使用的工厂类JMS ConnectionFactory (2)、使用管理对象JMS ConnectionFactory建立连接Connection,并启动 (3)、使用连接Connection 建立会话Session (4)、使用会话Session和管理对象Destination创建消息生产者MessageSender (5)、使用消息生产者MessageSender发送消息 消息接收者从JMS接受消息的步骤 (5)、使用消息接收者MessageReceiver接受消息,需要用setMessageListener将MessageListener接口绑定到MessageReceiver消息接收者必须实现了MessageListener接口,需要定义onMessage事件方法。

<b>五、 </b><b>代码示例</b><b></b>

在代码开始,我们先建一个project,在这个project中添加如下jar包

ActiveMQ 即时通讯服务 浅析

添加完jar包后就可以开始实际的代码工作了。

1、 使用JMS方式发送接收消息 消息发送者

  接受者

2、 Queue队列方式发送点对点消息数据 发送方

接收方

3、 Topic主题发布和订阅消息 消息发送方
4、 整合Spring实现消息发送和接收,在整合之前我们需要添加jar包,需要的jar包如下
ActiveMQ 即时通讯服务 浅析
这些jar包可以在D:\apache-activemq-5.8.0\lib这个lib目录中找到,添加完jar包后就开始编码工作。

消息接收者

这里主要是用到了JmsTemplate这个消息模板,这个对象在spring的IoC容器中管理,所以要从spring的容器上下文中获取。下面看看spring的配置文件applicationContext-beans.xml内容:

这里的整合就比较简单了,如果你是web工程,那你在需要用jms的时候,只需用注入jmsTemplate即可。

本文转自hoojo博客园博客,原文链接:http://www.cnblogs.com/hoojo/p/active_mq_jms_apache_activeMQ.html,如需转载请自行联系原作者