1. 程式人生 > >ActiveMQ利用ajax收發訊息

ActiveMQ利用ajax收發訊息

準備工作:

後臺需要導包:

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);

});