我正在使用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或类似软件的软件负载平衡器) –