我正在使用ajax客戶端連接到activemq。 ajax客戶端可以支持故障轉移傳輸嗎?我在代理中使用嵌入式Jetty,它使用vm傳輸將消息轉發給代理。在ActiveMQ Ajax客戶端中使用故障轉移URI
的AJAX客戶端發送使用URL
http://localhost:8161/api/amq
我怎樣才能把支持故障轉移到這個消息的經紀人。
FWIW我正在使用amq.js.
謝謝, 巴努•
我正在使用ajax客戶端連接到activemq。 ajax客戶端可以支持故障轉移傳輸嗎?我在代理中使用嵌入式Jetty,它使用vm傳輸將消息轉發給代理。在ActiveMQ Ajax客戶端中使用故障轉移URI
的AJAX客戶端發送使用URL
http://localhost:8161/api/amq
我怎樣才能把支持故障轉移到這個消息的經紀人。
FWIW我正在使用amq.js.
謝謝, 巴努•
添加下面的獲取和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>
故障轉移輸送爲OpenWire連接。對於HTTP,您需要一些其他故障轉移機制,例如負載均衡器,它知道哪些節點聯機或不聯機。
嗯,我們有負載平衡器支持,但我們主要用它來在DR和正常模式之間切換。想知道這是否有一個簡單的方法。 – Bhanu
那麼,amq.js中沒有客戶端支持故障轉移。如果您不想切換到其他方式進行安裝,則需要依賴諸如負載平衡器之類的HTTP故障轉移機制(甚至可以是使用Nginx或類似軟件的軟件負載平衡器) –