A2·ActiveMQ ajax使用方式及Spring配置注意事項
阿新 • • 發佈:2018-11-26
通過上一篇文章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頁面程式碼,
- 程式碼中所需的js檔案在【ActiveMQ安裝目錄\webapps-demo\demo\js】目錄下可以找到。
- 本文程式基於SSM框架,程式碼中的sendMessage和sendMessage1兩個方法都可以使用
- 相比於官網給出的文件,這裡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>
- 參考文件