1. 程式人生 > >A2·ActiveMQ ajax使用方式及Spring配置注意事項

A2·ActiveMQ ajax使用方式及Spring配置注意事項

       通過上一篇文章https://blog.csdn.net/lycz_tpself/article/details/81115918可以完成ActiveMQ後端使用要完成的配置,本文基於上篇博文介紹前端ajax使用所需要的額外配置。

  • 新增的jar包
                <dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-all</artifactId>
			<version>5.15.4</version>
		</dependency>
		<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-web</artifactId>
			<version>5.15.4</version>
		</dependency>
  • 新增的web.xml配置
	<!-- 配置支援ajax的jms -->
	<context-param>
		<param-name>org.apache.activemq.brokerURL</param-name>
		<param-value>tcp://127.0.0.1:61616</param-value>
	</context-param>
	<servlet>
		<servlet-name>AjaxServlet</servlet-name>
		<servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
		<async-supported>true</async-supported>
	</servlet>
	<servlet-mapping>
		<servlet-name>AjaxServlet</servlet-name>
		<url-pattern>/amq/*</url-pattern>
	</servlet-mapping>

 需要注意的是,如果像上述程式碼一樣在AjaxServlet中加入了<async-supported>true</async-supported>還是報java.lang.IllegalStateException: A filter or servlet of the current chain does not support asynchron錯誤,需要檢查一下配置檔案中如下所示的攔截器,這些filter也需要加入<async-supported>true</async-supported>。

<!-- Character Encoding filter -->
	<filter>
		<filter-name>SpringEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<async-supported>true</async-supported>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
  • 配置到此就結束了,下面給出一份例項的html頁面程式碼,
  1. 程式碼中所需的js檔案在【ActiveMQ安裝目錄\webapps-demo\demo\js】目錄下可以找到。
  2. 本文程式基於SSM框架,程式碼中的sendMessage和sendMessage1兩個方法都可以使用
  3. 相比於官網給出的文件,這裡amp物件在初始化時使用的uri是【../amq】,這是因為此檔案並不在webapp根目錄下,所屬位置如圖,uri的目的是為了讓amq物件初始化時呼叫根目錄下的amq方法,本文是【http://localhost:8080/SSMMJFT/amq】:

<!DOCTYPE html>
<html>
<head>
<title>testActiveMQ.html</title>
<meta name="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="../style/jquery-3.2.1.js"></script>
<script type="text/javascript" src="../style/amq_jquery_adapter.js"></script>
<script type="text/javascript" src="../style/amq.js"></script>

<style type="text/css">
#show {
	width: 800px;
	height: 500px;
	border: 1px solid black;
}
</style>
</head>

<body>
	<input type="text" name="sendMessage">
	<a href="javascript:void(0)" onclick="sendMessage1()">點選</a>
	<div id="show"></div>
</body>
<script type="text/javascript">
	var amq = org.activemq.Amq;
	var myDestination = 'topic://biz1.topic';
	/* var myDestination = 'channel://chat1'; */

	amq.init({
		uri : '../amq', //AjaxServlet所配置對應的URL
		logging : true, //啟用日誌記錄
		timeout : 20, //保持連線時長,單位為秒
		clientId : (new Date()).getTime().toString() //防止多個瀏覽器視窗標籤共享同一個JSESSIONID
	});

	var myHandler = {
		rcvMessage : function(message) {
			$("#show").append(message).append("<br>");
		}
	};

        /* 新增監聽 */
	amq.addListener('sadf', myDestination, myHandler.rcvMessage);

	/* 傳送訊息到AMQ */
	function sendMessage() {
		let message = $("input[name = 'sendMessage']").val();
		$.post("/SSMMJFT/AMQMessage/localMessageSend.do"
			, {
				style : "topic",
				message : message,
			}
			, function(data) {
				if (data.status !== 200) {
					layer.msg(data.msg);
				}
			});
	}
	function sendMessage1() {
		let message = $("input[name = 'sendMessage']").val();
		amq.sendMessage(myDestination, message);
	}
</script>
</html>
  • 參考文件

http://billmingchen.iteye.com/blog/1922020