0

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

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

http://localhost:8161/api/amq

我怎样才能将故障转移支持带入其中。

FWIW 我正在使用 amq.js。

谢谢, 巴努

4

2 回答 2

1

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

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>
于 2015-01-02T03:54:28.920 回答
0

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

于 2013-05-20T07:40:51.280 回答