2013-05-20 56 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或类似软件的软件负载平衡器) –

相关问题