2013-05-20 2 views
0

Я использую клиент ajax для подключения к activemq. Может ли activemq клиент ajax поддерживать переход на другой ресурс? Я использую встроенный Jetty внутри брокера, который использует vm-транспорт для пересылки сообщений брокеру.Использование отказоустойчивого URI в ActiveMQ Ajax-клиенте

Клиент AJAX отправляет сообщения брокеру, используя URL

http://localhost:8161/api/amq 

Как я могу принести поддержку отказоустойчивого в этом.

FWIW Я использую amq.js.

Спасибо, Bhanu

ответ

1

Добавьте следующие функции и получать инкубационные к концу объекта возвращается в 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 
}); 

Вам также необходимо CORS включены в сервер Jetty, на котором размещена AjaxServlet, если вы хотите установить соединение между серверами. Чтобы сделать это, включите встроенный Jetty CORS фильтр со следующей конфигурацией в файле web.xml:

<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 или аналогичного) –

Смежные вопросы