Как я могу использовать JMS Broker от Glassfish, чтобы «прокси» передать сообщение JMS Broker в Интернете? - PullRequest
3 голосов
/ 28 января 2010

Я работаю над приложением Java EE 6 Enterprise, которое работает на моей локальной установке Glassfish3. Один из моих EJB-компонентов должен отправлять сообщения на удаленный JMS-брокер, который находится где-то в Интернете.

К сожалению, подключение к Интернету довольно ненадежное, поэтому моя идея состоит в том, чтобы сначала отправить сообщения в собственный JMS-брокер Glassfish local . Мой локальный посредник будет затем пересылать сообщения в удаленный посредник. Если интернет-соединение будет недоступно, локальный брокер будет просто ждать, пока соединение не восстановится.

Правильно ли я считаю, что это сработает? Если это так, я был бы очень признателен за некоторые идеи, как начать.

Ответы [ 2 ]

1 голос
/ 28 января 2010

Этот подход идеально подходит для этой ситуации (когда удаленная конечная точка не всегда доступна) и известен как обмен сообщениями «хранение и пересылка». Фактически, многие серверы приложений поддерживают это "из коробки", например, WebLogic и его Store and Forward service:

Служба SAF позволяет WebLogic Server надежно доставлять сообщения между приложениями, которые распределены по экземплярам WebLogic Server. Например, с помощью службы SAF приложение, которое запускается или подключается к локальному экземпляру WebLogic Server, может надежно отправлять сообщения в конечную точку, которая находится на удаленном сервере. Если пункт назначения недоступен в момент отправки сообщений, либо из-за проблем с сетью, либо из-за сбоев системы, тогда сообщения сохраняются на экземпляре локального сервера и перенаправляются на удаленную конечную точку, как только она становится доступной.

* +1007 *

В случае Open MQ (реализация JMS GlassFish) я знал, что Хранение и пересылка сообщений были в планах функций (см. в этой презентации от 2007). Но у меня есть некоторые трудности, чтобы найти точный статус (сообщения типа , этот на самом деле не проясняют ситуацию). Вы уверены, что GlassFish v3 использует Open MQ 4.4, а Open MQ 4.4 имеет мост JMS (который требуется для хранения и пересылки), и вы можете использовать его для связи между брокером и брокером. См. это недавнее сообщение в блоге о том, как его настроить (не удалось найти документацию по Open MQ 4.4 !!). Лично я бы отправил сообщение в список рассылки dev.

Теперь, если это не совсем понятно, или если вы не получите удовлетворительный ответ, всегда можно написать собственное приложение для приема сообщений и пересылки их другому брокеру, и это не так сложно. По сути, хранение и пересылка сообщений означает использование «локальной» постоянной очереди для приложения и использование MDB для приема сообщений и их отправки в удаленное место назначения JMS (в одной транзакции). Это потребует некоторого дополнительного тестирования, но, как клиент JMS, MDB, который обрабатывает пересылку, должен иметь возможность прозрачного повторного подключения к удаленному месту назначения.

0 голосов
/ 28 января 2010

JMS хорошо подходит, когда клиенты (производитель или потребитель) ненадежны, но в случае, если сам брокер не является надежным, у вас проблемы.

Вы можете попробовать поиграть с параметрами redelivery (время ожидания, количество повторных попыток и т. Д.) «Промежуточного» брокера. Тем не менее, вам все еще нужен фиктивный MDB, который действует как пересылщик: заявляющий брокер пытается доставить фиктивный MDB, который пытается подключиться к внешнему брокеру. Если это не удается, транзакция завершается неудачно, и сообщение остается в промежуточном посреднике. Затем брокер-заявитель попытается повторно доставить сообщение на фиктивную MDB.

Возможности повторной доставки «промежуточного» посредника могут помочь в решении проблем с подключением в случае, если MDB не сможет переслать сообщение «внешним» посредникам. Тем не менее, помните, что в определенный момент времени сообщение может перейти в очередь мертвых сообщений (DMQ) «промежуточного» посредника или даже быть отброшено в зависимости от того, как оно настроено.

Но это все еще звучит немного странно для меня ...

...