ActiveMQ利用ajax收發訊息
阿新 • • 發佈:2018-11-29
準備工作:
後臺需要導包:
activemq-all.jar
activemq-web.jar
jetty-all.jar
如果是maven專案:
pom.xml
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.8.0</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-web</artifactId> <version>5.8.0</version> </dependency>
修改配置:
web.xml配置,主要是配置接收客戶端請求的servlet
<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> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>AjaxServlet</servlet-name> <url-pattern>/amq/*</url-pattern> </servlet-mapping>
說明:
<url-pattern>/amq/*</url-pattern>,配置會在amq.js傳送訊息時請求的servlet的rul,在amq.js初始化時要做響應的配置.
<load-on-startup>1</load-on-startup>表示這個servlet在tomcat啟動時就例項化
<async-supported>true</async-supported>
servlet3.0新增非同步處理支援<async-supported>true</async-supported>有時候會報
java.lang.IllegalStateException: A filter or servlet of the current chain does not support asynchronous operations. 錯誤,
解決方法: 再所有的servlet和filter中都宣告asyncSupported=true。
js的引用:
1.需要引入3個js 需要在網站下
<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>
2.amq.js需要初始化
<script type="text/javascript">
$(document).ready(
function()
{
org.activemq.Amq.init(
{
uri: 'amq',
logging: true,
timeout: 1,
clientId:(new Date()).getTime().toString()
}
);
});
</script>
$(function(){
//mq初始化
var amq = org.activemq.Amq;
var myDestination='topic://test.topic';//test.topic為topic的名稱
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("");
});
//接收訊息
rcvMessage: function(message){
$("#mqNum").text(message.data);
// $("#distext").append(message.getAttribute('name')+":"+message.getAttribute('msg')+"\n");
console.log(list);
}
};
//註冊訊息處理器
amq.addListener('handler',myDestination,myHandler.rcvMessage);
});