2013-05-20 82 views
0

我正在使用ajax客戶端連接到activemq。 ajax客戶端可以支持故障轉移傳輸嗎?我在代理中使用嵌入式Jetty,它使用vm傳輸將消息轉發給代理。在ActiveMQ Ajax客戶端中使用故障轉移URI

的AJAX客戶端發送使用URL

http://localhost:8161/api/amq 

我怎樣才能把支持故障轉移到這個消息的經紀人。

FWIW我正在使用amq.js.

謝謝, 巴努•

回答

1

添加下面的獲取和setter函數對象的結束在amq.js文件(即testPollHandler功能之後)返回:

setUri: function(newUri) { 
    uri = newUri; 
}, 
getUri: function() { 
    return uri; 
} 

然後做這樣的事情,切換到下一臺服務器如果連接不能建立:

var ACTIVEMQ_SERVERS = ["http://server1:8161/ajax/amq","http://server2:8161/ajax/amq"]; 
var amq = org.activemq.Amq; 

function connectStatusHandler(connected) { 
    if (!connected) {  
     var index = _.indexOf(ACTIVEMQ_SERVERS, amq.getUri()); 
     var newIndex = (index + 1) % ACTIVEMQ_SERVERS.length; 
     var uri = ACTIVEMQ_SERVERS[newIndex]; 
     amq.setUri(uri); 

     if (window.console) { 
      console.log("Lost connection. Attempting next server: " + uri); 
     } 
    } 
} 

amq.init({ 
    uri: ACTIVEMQ_SERVERS[0], 
    logging: true, 
    timeout: 20, 
    connectStatusHandler: connectStatusHandler, 
    logging: true 
}); 

您還需要在承載AjaxServlet,如果你要建立跨服務器連接Jetty服務器啓用CORS。爲此,使用web.xml文件中的以下配置啓用內置的Jetty CORS過濾器:

<filter> 
    <filter-name>cross-origin</filter-name> 
    <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class> 
    <init-param> 
     <param-name>allowedOrigins</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>allowedMethods</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>allowedHeaders</param-name> 
     <param-value>*</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>cross-origin</filter-name> 
    <url-pattern>/amq/*</url-pattern> 
</filter-mapping> 
0

故障轉移輸送爲OpenWire連接。對於HTTP,您需要一些其他故障轉移機制,例如負載均衡器,它知道哪些節點聯機或不聯機。

+0

嗯,我們有負載平衡器支持,但我們主要用它來在DR和正常模式之間切換。想知道這是否有一個簡單的方法。 – Bhanu

+0

那麼,amq.js中沒有客戶端支持故障轉移。如果您不想切換到其他方式進行安裝,則需要依賴諸如負載平衡器之類的HTTP故障轉移機制(甚至可以是使用Nginx或類似軟件的軟件負載平衡器) –

相關問題