2010-02-17 3 views
17

Я нахожусь в процессе обучения ActiveMQ и Camel, с целью создать небольшой прототип системы, которая работает что-то вроде этого:Распределенная ActiveMQ с Верблюд

alt text http://www.paulstovell.com/get/stackoverflow-questions/Queues.png (big)

Когда заказ размещен в система заказов, сообщение отправляется любым абонентам (паб/к югу от системы), и они могут сыграть свою роль в обработке заказа. Приказы, Отгрузка и Счета-фактуры приложения имеют свои собственные установки ActiveMQ, так что, если какая-либо из трех систем находится в автономном режиме, остальные могут продолжать функционировать. Что-то заботится о перемещении сообщений между ActiveMQ устанавливает.

Получение Apache Camel для перемещения сообщений из одной очереди в другую по маршрутам довольно просто, если они находятся в одном экземпляре ActiveMQ. Таким образом, это работает для управления очередями подписки.

Следующая задача - нажимать сообщения из одного экземпляра ActiveMQ в другой, и это бит, где я не уверен, что посмотреть дальше.

  1. Can Camel маршрут между различными установками ActiveMQ? (Я не могу понять, что такое URI конечной точки JMI, если они находятся на разных машинах).
  2. Я понимаю ActiveMQ имеет store and forward возможности. Это то, что я хотел бы использовать для перемещения сообщений между заказами и доставкой/выставлением счетов?
  3. Или это то, что Apache ServiceMix призвана решить?

ответ

19

Это довольно простой асинхронный, управляемое событиями приложение, которое хорошо подходит для ActiveMQ и Camel.

На самом деле вы делаете не перемещать сообщения явно из одного экземпляра ActiveMQ в другой. Как это работает, используйте то, что известно как network of brokers. В вашем случае у вас будет три брокера: ActiveMQ-фиолетовый, ActiveMQ-зеленый и ActiveMQ-синий. ActiveMQ-фиолетовый создает однонаправленная брокерская сеть с ActiveMQ-зеленым и ActiveMQ-синим цветом, что позволяет ActiveMQ-фиолетовому сохранять сообщения с поддержкой ActiveMQ-green и ActiveMQ-blue на основе потребительского спроса.

Порядки приложение принимает заказы на очереди заказов на ActiveMQ-фиолетовый. Приложение Orders использует Camel для обработки и обработки сообщения, чтобы определить, является ли оно фактурным сообщением или отправляющим сообщением. Camel направляет сообщения в очередь фактурирования или в очередь доставки на ActiveMQ-фиолетовом.

Потребительский спрос поступает из приложения-фактуры и приложения для доставки. В Invoicing используется Camel для использования сообщений из очереди выставления счетов в ActiveMQ-green. Приложение Shipping использует Camel для использования сообщений из очереди доставки в ActiveMQ-синем. Из-за брокерской сети и из-за потребительского спроса в очереди ActiveMQ-green.invoicing и очереди ActiveMQ-blue.shipping сообщения будут перенаправлены из ActiveMQ-фиолетового в соответствующий брокер и очередь. Нет необходимости явно направлять сообщения конкретному брокеру.

Надеюсь, это ответит на ваши вопросы. Дай мне знать, если у тебя есть.

Bruce

1

Хмммм, я только в лучшем случае пробовал, а не на справедливое время, но я попробую что-нибудь предложить.

ActiveMQ может маршрутизировать между различными установками и просто использует стандартные URI для моих знаний, поэтому я не уверен, в чем проблема. Я бы подумал, что с использованием TCP вам будет хорошо. Использование ServiceMix (вы об этом позже), вы бы просто указать ConnectionFactory & затем предоставить URI в этом. Эта ссылка показывает некоторые примеры http://servicemix.apache.org/servicemix-jms-new-endpoints.html.

Camel имеет поддержку для надежного подписчика, если это то, что вы были после (http://camel.apache.org/durable-subscriber.html)? Этот шаблон гарантирует, что, если абонент находится в автономном режиме, когда сообщение будет готово, оно будет удерживаться до тех пор, пока абонент не будет подключен к сети. Это подтверждается также ServiceMix (см ссылку, приведенные выше и искать 'subscriptionDurable.

+0

Отлично, спасибо, это дает мне направление! –

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