У меня есть два кластерных управляемых сервера, работающих на Weblogic, и отдельные JMS server1 and server2
работают на каждом управляемом сервере. Проблема в файле свойств приложения, мы только жестко запрограммировали и передали приложению JMS server1 JNDI name
. Таким образом, оба приложения, работающие на каждом узле, фактически используют только один фиксированный сервер JMS, который не является полностью распределенным и кластеризованным. Если сервер JMS 1 не работает, все приложение будет остановлено.
Мой вопрос в том, как позволить приложению динамически находить сервер JMS в приведенном выше сенарио? Не могли бы вы указать мне направление? Спасибо!
3 ответа
Он находится в документации Weblogic по адресу: http: // docs. oracle.com/cd/E14571_01/web.1111/e13738/best_practice.htm#CACDDFJD
В основном вы создали список серверов, разделенных запятыми, и логика подключения JMS должна автоматически обрабатывать случай, когда один из серверов не работает:
Например
t3://hostA:7001,hostB:7001
При использовании такого свойства, как jms.jndi.provider.url = t3: // hostA: 31122, hostA: 31124
он сообщает wls подключиться к hostA: 31122 или hostA: 31124. Обратите внимание, что ваш JMS-клиент в любой момент времени подключен только к одному хосту. когда вы завершаете работу hostA, соединение между JMS-клиентом и сервером резко прерывается, что приводит к возникновению исключения, ваш код должен будет аккуратно обработать это исключение и периодически пытаться подключиться к WLS снова, чтобы убедиться, что он соединяется с hostB.
WLS внутренне выполняет циклический перебор запроса, если работает более 1 экземпляра клиента JMS.
При использовании MDB в качестве клиента JMS и развертывании его в кластере и использовании такого URL-адреса 1 экземпляр mdb будет подключаться к одному хосту, а другой экземпляр будет подключаться к другому хосту. MDB также имеет возможность периодически повторно подключаться к месту назначения JMS.
Простым решением вашей проблемы может быть 1) Установите jms.jndi.provider.url = t3: // hostA: 31122, hostA: 31124 2) Иметь 2 экземпляра клиентского кода JMS, поэтому один будет подключаться к порту 31122 и другие на 31124 3) Установите задержку пересылки в очереди JMS, чтобы сообщение не оставалось в очереди, не потребляясь надолго, и перенаправлялось в другую очередь, у которой есть активный потребитель.
Я обновляю здесь свой прогресс вместо того, чтобы добавлять комментарии. Я протестировал использование автономного клиента JMS, изменив файл свойств с t3://hostA:7001
на t3://hostA:7001,hostB:7001
для поставщика JMS. Переход на другой ресурс автоматически обрабатывается WLS. Код не меняется. Исключение, которое я получил выше, вызвано использованием wlclient.jar, он работает после изменения на wlfullclient.jar.
Я следил за этим ссылка для создания wlfullclient.jar.
Спасибо всем!
Похожие вопросы
Связанные вопросы
Новые вопросы
jms
API Java Message Service (JMS) - это API Java Message Oriented Middleware (MOM) для отправки сообщений между двумя или более клиентами. JMS является частью платформы Java Enterprise Edition и определяется спецификацией, разработанной в рамках процесса сообщества Java.