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:

<!-- 配置支持ajax的jms -->
    <context-param>
        <param-name>org.apache.activemq.brokerURL</param-name>
        <param-value>tcp://localhost:61616</param-value>
        <description>连接到消息中间件的URL</description>
    </context-param>
    <servlet>
	<servlet-name>AjaxServlet</servlet-name>
	<servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
	<servlet-name>AjaxServlet</servlet-name>
	<url-pattern>/amq/*</url-pattern>
    </servlet-mapping>

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

<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="js/amq_jquery_adapter.js"></script>
<script type="text/javascript" src="js/amq.js"></script>
<script type="text/javascript">
  var amq = org.activemq.Amq;
  amq.init({ 
    uri: 'amq', //AjaxServlet所配置对应的URL
    logging: true,//激活日志记录
    timeout: 20,//保持连接时长,单位为秒
    clientId:(new Date()).getTime().toString() //防止多个浏览器窗口标签共享同一个JSESSIONID
  });
</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会把消息传递到你的处理代码块。


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

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="js/amq_jquery_adapter.js"></script>
<script type="text/javascript" src="js/amq.js"></script>
<script>  
$(function(){
	var amq = org.activemq.Amq;
	var myDestination='topic://chat1';
	amq.init({ 
	  uri: 'amq', //AjaxServlet所配置对应的URL
	  logging: true,//激活日志记录
	  timeout: 20,//保持连接时长,单位为秒
	  clientId:(new Date()).getTime().toString() //防止多个浏览器窗口标签共享同一个JSESSIONID
	});
	
	//发送消息	
	$("#sendBtn").click(function(){
		var msg=$("#msg").val();
		var name=$("#name").val();
		amq.sendMessage(myDestination, "<message name='"+name+"' msg='"+msg+"'/>");
		$("#msg").val("");
	});
	
	//接收消息
	var myHandler =
	{
	  rcvMessage: function(message)
	  {
	     //alert("received "+message);
		  $("#distext").append(message.getAttribute('name')+":"+message.getAttribute('msg')+"\n");
	  }
	};

	amq.addListener('handler',myDestination,myHandler.rcvMessage);
	
});

</script>
</head>
<body>
	<h1>发送 ajax JMS 消息</h1>
	<body>  
	消息窗口<br>
<textarea rows="10" cols="50" id="distext" readonly="readonly"></textarea>  
<br>   
<br/>
昵称:<input type="text" id="name"><br/>
消息:<input type="text"  id="msg">
<input type="button" value="发送消息" id="sendBtn"/>  

</body>
</html>

实现页面效果具体如下:



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值