Базовый пример отработки отказа Apache Camel LoadBalancer
Для начала я просто хочу сообщить вам, что я новичок в Camel, и совсем недавно я понял его основные концепции.
Я пытаюсь создать базовый рабочий пример, используя Apache-Camel с ActiveMQ в качестве брокера и используя jms-компонент в качестве клиента loadbalancer, используя конструкцию аварийного переключения. Все это делается только с использованием Java DSL (если возможно).
Пример состоит из 4 основных приложений, которые называются MyApp-A, MyApp-B, MyApp-C и MyApp-D. В обычном сценарии MyApp-A читает файл с моего компьютера, а затем преобразует его в сообщение. Затем он отправляет это сообщение в MyApp-B, а MyApp-B отправляет его в MyApp-C.
Тем не менее, есть сценарий сбоя. В этом случае MyApp-A не удается отправить сообщение MyApp-B. Затем он отправляет сообщение в MyApp-D, которое, в свою очередь, отправляет его в MyApp-C.
Сильфон это мой код для MyApp-A
public class MyApp-A {
public static void main(String args[]) throws Exception {
// create CamelContext
CamelContext context = new DefaultCamelContext();
// connect to embedded ActiveMQ JMS broker
ConnectionFactory connectionFactory =
new ActiveMQConnectionFactory("vm://localhost");
context.addComponent("jms",
JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
// add our route to the CamelContext
context.addRoutes(new RouteBuilder() {
@Override
public void configure() {
from("file:data/inbox?noop=true")loadbalancer().failover().to("MyApp-B:incomingOrders").to("MyApp-D:incomingOrders").end();
}
});
// start the route and let it do its work
context.start();
Thread.sleep(10000);
// stop the CamelContext
context.stop();
}
}
Я рассмотрел использованиеверблюд-FTP но это не будет работать, потому что MyApp-C не будет знать, что MyApp-B умер, и не будет знать, что он должен был извлечь из MyApp-D.
Теперь у меня есть несколько проблем и вопросов:
Как отправить сообщение (в данном случае файл) из MyApp-A в MyApp-B, который является другим приложением? Что я должен на самом деле положить в.to(String)
метод Java DSL?Как я на самом деле код MyApp-B? Как заставить его получить сообщение от A (которое является другим приложением, возможно, на другом компьютере) и отправить его на MyApp-C (я предполагаю, что если я узнаю, как отправить с MyApp-A на MyApp-B, Я буду знать, как отправить из MyApp-B в MyApp-C)?Как MyApp-A обнаружит сбой MyApp-B?Какой компонент верблюда я должен использовать?Если бы вы могли оставить отзыв о моем коде и о том, как решить проблему, я был бы более чем благодарен.