Подтвердить что ты не робот

Распределенный ActiveMQ с Camel

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

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

(большой)

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

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

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

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

Ответ 1

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

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

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

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

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

Брюс

Ответ 2

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

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

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