`
kavy
  • 浏览: 891772 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

activemq 通过ajax发送接收消息

 
阅读更多

本文以最新版activemq5.8为例,参考http://activemq.apache.org/ajax.html官网ajax使用例子,作了网页版的聊天室例子。

 

ActiveMQ支持Ajax,这意味着你可以利用ActiveMQ的“发布/订阅”的特性,来创建高度实时的web应用。

Ajax允许浏览器网页客户端通过互联网收发信息。ActiveMQ对Ajax的支持建立在与REST的ActiveMQ连接器相同的基础上,该连接器允许任意可联网的设备通过JMS收发消息。

具体开发过程如下:

1)首先在web应用的web.xml文件配置AMQ的ajaxServlet,以此来支持ajax的JMS:

 

[plain] view plaincopy
 
  1. <!-- 配置支持ajax的jms -->  
  2.     <context-param>  
  3.         <param-name>org.apache.activemq.brokerURL</param-name>  
  4.         <param-value>tcp://localhost:61616</param-value>  
  5.         <description>连接到消息中间件的URL</description>  
  6.     </context-param>  
  7.     <servlet>  
  8.     <servlet-name>AjaxServlet</servlet-name>  
  9.     <servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class>  
  10.     <load-on-startup>1</load-on-startup>  
  11.     </servlet>  
  12.     <servlet-mapping>  
  13.     <servlet-name>AjaxServlet</servlet-name>  
  14.     <url-pattern>/amq/*</url-pattern>  
  15.     </servlet-mapping>  


2)在使用ajax发送接收消息的页面中,导入支持也消息中间件通讯的js文件,activemq支持Jquery,Prototype,Dojo三种适配器,我这里使用的是Jquery作为适配器。

 

[html] view plaincopy
 
  1. <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>  
  2. <script type="text/javascript" src="js/amq_jquery_adapter.js"></script>  
  3. <script type="text/javascript" src="js/amq.js"></script>  
  4. <script type="text/javascript">  
  5.   var amq = org.activemq.Amq;  
  6.   amq.init({   
  7.     uri: 'amq', //AjaxServlet所配置对应的URL  
[html] view plaincopy
 
  1.     logging: true,//激活日志记录  
  2.     timeout: 20,//保持连接时长,单位为秒  
  3.     clientId:(new Date()).getTime().toString() //防止多个浏览器窗口标签共享同一个JSESSIONID  
  4.   });  
  5. </script>  

 

 

3)发送消息

 

要从javascript客户端发送一条JMS消息,需要做的仅仅是调用这个方法:

amq.sendMessage(myDestination,myMessage);

这里的myDestination是目的地URL字符串地址(例如:"topic://MY.NAME" 或者 "channel://MY.NAME"),myMessage是任意格式化好的XML或者被编码为XML内容的纯文本。

 

4)接收消息

要接收消息,客户端必须定义一个消息处理函数,并且将其注册到amq对象中。例如:

 

var myHandler =
{
  rcvMessage: function(message)
  {
     alert("received "+message);
  }
};

amq.addListener(myId,myDestination,myHandler.rcvMessage);

 

这里的myId是一个字符串标识符,在之后调用amq.removeHandler(myId)函数的时候会用到。myDestination是目的地URL字符串地址(例如:"topic://MY.NAME" 或者 "channel://MY.NAME")。接收到消息的时候,回调函数myHandler.rcvMessage会把消息传递到你的处理代码块。

 

具体整个聊天室页面代码如下:

 

[html] view plaincopy
 
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"%>  
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>  
  8. <script type="text/javascript" src="js/amq_jquery_adapter.js"></script>  
  9. <script type="text/javascript" src="js/amq.js"></script>  
  10. <script>    
  11. $(function(){  
  12.     var amq = org.activemq.Amq;  
  13.     var myDestination='topic://chat1';  
  14.     amq.init({   
  15.       uri: 'amq', //AjaxServlet所配置对应的URL  
  16.       logging: true,//激活日志记录  
  17.       timeout: 20,//保持连接时长,单位为秒  
  18.       clientId:(new Date()).getTime().toString() //防止多个浏览器窗口标签共享同一个JSESSIONID  
  19.     });  
  20.       
  21.     //发送消息    
  22.     $("#sendBtn").click(function(){  
  23.         var msg=$("#msg").val();  
  24.         var name=$("#name").val();  
  25.         amq.sendMessage(myDestination, "<message name='"+name+"' msg='"+msg+"'/>");  
  26.         $("#msg").val("");  
  27.     });  
  28.       
  29.     //接收消息  
  30.     var myHandler =  
  31.     {  
  32.       rcvMessage: function(message)  
  33.       {  
  34.          //alert("received "+message);  
  35.           $("#distext").append(message.getAttribute('name')+":"+message.getAttribute('msg')+"\n");  
  36.       }  
  37.     };  
  38.   
  39.     amq.addListener('handler',myDestination,myHandler.rcvMessage);  
  40.       
  41. });  
  42.   
  43. </script>  
  44. </head>  
  45. <body>  
  46.     <h1>发送 ajax JMS 消息</h1>  
  47.     <body>    
  48.     消息窗口<br>  
  49. <textarea rows="10" cols="50" id="distext" readonly="readonly"></textarea>    
  50. <br>     
  51. <br/>  
  52. 昵称:<input type="text" id="name"><br/>  
  53. 消息:<input type="text"  id="msg">  
  54. <input type="button" value="发送消息" id="sendBtn"/>    
  55.   
  56. </body>  
  57. </html>  


实现页面效果具体如下:

 

 

http://blog.csdn.net/elender/article/details/8668810

分享到:
评论

相关推荐

    activemq 通过ajax发送接收消息简单例子

    在这个简单的例子中,我们将探讨如何利用Ajax与ActiveMQ交互,发送和接收消息。首先,你需要在服务器端设置一个ActiveMQ实例,可以通过下载并安装ActiveMQ来完成。安装完成后,启动ActiveMQ服务,这通常会开启一个...

    ActiveMQ 使用Ajax 收发消息实战

    2. **JMS(Java消息服务)接口**:ActiveMQ是JMS的实现,JMS提供了一套标准API,使得应用程序可以发送和接收消息。理解JMS的基本概念如队列(Queue)和主题(Topic)是关键。 3. **Ajax客户端库**:在前端,我们...

    activemq ajax方式demo

    2. **发送消息**:使用Ajax,客户端可以向ActiveMQ发布消息,这通常涉及构建JMS消息对象,设置目的地(如主题或队列),然后通过Ajax请求发送到服务器。 3. **接收消息**:同样,客户端会监听服务器的响应,一旦有新...

    ActiveMQ使用Ajax实现多人聊天室

    4. **消息格式**:Ajax发送的消息通常会是JSON格式,包含必要的元信息(如发送者ID、时间戳)以及聊天内容。 5. **订阅消息**:同样在客户端,使用Ajax实现一个长轮询(Long Polling)或者WebSocket连接来实时接收...

    Spring+ActiveMQ消息队列+前台接收消息

    通过以上步骤,你可以成功地将Spring与ActiveMQ整合,实现后台消息的生产和消费,并在前台接收到这些消息。这种设计模式常用于大型分布式系统,如订单处理、日志收集、任务调度等场景,以提高系统的可靠性和响应速度...

    ActiveMQ实例

    通过配置Spring的`JmsTemplate`,开发者可以发送和接收消息,而无需直接操作JMS API。此外,Spring还支持ActiveMQ的PooledConnectionFactory,提高了性能和资源管理效率。 2. **ActiveMQ与Swing整合**: Swing是...

    ssh+dwr+activeMQ(在线聊天)

    在在线聊天应用中,ActiveMQ可以作为消息代理,存储和转发聊天消息,确保即使在高并发或网络不稳定的情况下,消息也能被正确发送和接收。 【Ajax】:AJAX(Asynchronous JavaScript and XML)是一种在无需刷新整个...

    ActiveMQ 消息队列

    在实际开发过程中,可以通过编写Java代码来发送和接收消息,利用JMS API与ActiveMQ建立连接。以下是一个简单的JMS消息发送和接收的例子: ```java // 发送消息 ConnectionFactory connectionFactory = new ...

    Apache_ActiveMQ教程

    生产者需要创建JMS连接,基于该连接创建会话,设置是否支持事务以及消息确认方式,创建目的地(Destination)对象以发送或接收消息,创建消息生产者并指定主题名称,最后将消息发送到队列。消费者则需要实现Message...

    ActiveMQ讲义.ppt

    1. 点对点(PTP,Point-to-Point):通过消息队列(Queue)实现,生产者将消息发送到队列,消费者从队列中消费消息。每个消息只能被一个消费者接收,保证了消息的一对一传递。 2. 发布/订阅(Publish/Subscribe):...

    spring整合Activemq源码

    - **使用JmsTemplate**:Spring提供的JmsTemplate类是发送和接收消息的便捷工具,可以通过它来发送简单或预定义的消息,同时处理消息的监听和回调。 - **消息生产者**:在SpringMVC的控制器中,我们可以创建一个...

    java中间件之activemq

    9. **Ajax调用支持**:允许通过Ajax方式与ActiveMQ进行交互,提升Web应用的响应速度。 10. **Web Service整合**:可以方便地与CXF、Axis等Web Service技术整合,确保消息传递的可靠性。 11. **内存中的JMS提供者**...

    Apache_ActiveMQ教程.docx

    3. 接收消息:通过调用MessageConsumer的receive方法获取并处理消息。 通过以上步骤,开发者可以构建起基于Apache ActiveMQ的点对点消息传递系统,实现不同组件或服务间的异步通信,提高系统的可扩展性和解耦性。...

    mqtt消息,通过js 接受和发送消息

    **MQTT消息通过JS接收与发送的实现** MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息协议,常用于物联网(IoT)设备之间的通信。它的设计目标是低开销、低带宽占用和高可靠性,使得它非常适合在...

    ActiveMQ教程

    例如,Queue消息示例展示了生产者如何发送消息,消费者如何接收消息,两者之间可以进行2000次消息交换。Topic消息示例则演示了发布/订阅模型,生产者向主题发布消息,多个订阅者可以接收到这些消息,整个过程会统计...

    Apache ActiveMQ教程 JMS 整合Tomcat

    Queue消息示例演示了典型的点对点通信模式,生产者与消费者之间进行消息的发送与接收,而Topic消息示例则展示了发布/订阅模型,一条消息可以被多个订阅者接收,体现了广播式的通信特点。 #### 四、Queue与Topic的...

    JMS ActiveMQ

    发送消息时,使用MessageProducer发送到指定Destination,接收消息则通过MessageConsumer。为了确保消息的可靠传递,可以使用事务或持久化机制。 六、Q&A 在实际应用中,可能遇到的问题包括消息丢失、性能优化、高...

    apache-activemq-5.15.2下的demo

    - 开发者可以通过运行这些示例来了解ActiveMQ的工作原理,如消息的创建、发送、接收以及如何设置消息的属性。 - 可以观察和调试代码,学习如何在实际项目中整合ActiveMQ,以实现应用间的解耦和异步处理。 5. **...

    Apache ActiveMQ Queue Topic 详解

    该示例会发送/接收 2000 条消息后自动关闭。 2. **Topic 消息示例**(群组订阅): - **启动 Topic 消息消费者**:运行 `cd example` 后执行 `ant topic-listener`。 - **启动 Topic 消息生产者**:运行 `cd ...

Global site tag (gtag.js) - Google Analytics