Распределенный ActiveMQ с верблюдом - PullRequest
17 голосов
/ 17 февраля 2010

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

alt text
(источник: paulstovell.com )

(большой)

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

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

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

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

Ответы [ 2 ]

20 голосов
/ 03 марта 2010

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

На самом деле вы не перемещаете сообщения явно из одного экземпляра ActiveMQ в другой. Это работает, используя так называемую сеть брокеров . В вашем случае у вас будет три брокера: ActiveMQ-фиолетовый, ActiveMQ-зеленый и ActiveMQ-синий. ActiveMQ-purple создает однонаправленную брокерскую сеть с ActiveMQ-зеленым и ActiveMQ-синим. Это позволяет ActiveMQ-пурпурному хранить и пересылать сообщения в ActiveMQ-зеленый и ActiveMQ-синий в зависимости от спроса потребителей.

Приложение «Заказы» принимает заказы в очереди заказов в ActiveMQ-purple. Приложение Orders использует Camel для получения и обработки сообщения, чтобы определить, является ли это сообщением-счетом или сообщением о доставке. Camel направляет сообщения либо в очередь выставления счетов, либо в очередь доставки на ActiveMQ-purple.

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

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

Брюс

1 голос
/ 18 февраля 2010

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

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

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

...