在ActiveMQ Ajax客户端中使用故障转移URI

在ActiveMQ Ajax客户端中使用故障转移URI,ajax,activemq,failover,Ajax,Activemq,Failover,我正在使用ajax客户端连接到activemq。activemq可以吗 ajax客户端是否支持故障转移传输?我在代理内部使用嵌入式Jetty,它使用vm传输将消息转发给代理 AJAX客户端使用URL向代理发送消息 http://localhost:8161/api/amq 如何将故障切换支持引入到这一过程中 FWIW我正在使用amq.js 谢谢, Bhanu故障转移传输用于OpenWire连接。对于HTTP,您需要一些其他的故障转移机制,例如负载平衡器,它知道哪些节点在线或不在线。将以下get

我正在使用ajax客户端连接到activemq。activemq可以吗 ajax客户端是否支持故障转移传输?我在代理内部使用嵌入式Jetty,它使用vm传输将消息转发给代理

AJAX客户端使用URL向代理发送消息

http://localhost:8161/api/amq
如何将故障切换支持引入到这一过程中

FWIW我正在使用amq.js

谢谢,
Bhanu

故障转移传输用于OpenWire连接。对于HTTP,您需要一些其他的故障转移机制,例如负载平衡器,它知道哪些节点在线或不在线。

将以下get和setter函数添加到amq.js文件中返回的对象的末尾(即testPollHandler函数之后):

然后,如果无法建立连接,请执行以下操作以切换到下一台服务器:

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>

交叉起源
org.eclipse.jetty.servlets.CrossOriginFilter
允许起源
*
允许的方法
*
允许的标题
*
交叉起源
/amq/*

Hmm,我们有负载平衡器支持,但我们主要用于在DR和正常模式之间切换。我想知道是否有一个简单的方法来实现这一点。嗯,amq.js中没有用于故障切换的客户端支持。如果不想切换到其他方式进行设置,则需要依赖HTTP故障切换机制,例如负载平衡器(甚至可以是使用Nginx或类似工具的软件负载平衡器)
<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>