Przykład awaryjnego przełączania podstawowego Apache Camel LoadBalancer
Na początek chcę tylko powiedzieć, że jestem nowy w Camel i bardzo niedawno zrozumiałem jego główne koncepcje.
Próbuję utworzyć podstawowy przykład pracy przy użyciu Apache-Camel z ActiveMQ jako brokerem i używając komponentu jms jako klienta loadbalancera przy użyciu konstrukcji failover. Wszystko to odbywa się tylko przy użyciu Java DSL (jeśli to możliwe).
Przykład składa się z 4 głównych aplikacji, zwanych MyApp-A, MyApp-B, MyApp-C i MyApp-D. W normalnym scenariuszu MyApp-A odczytuje plik z mojego komputera, a następnie przekształca go w wiadomość. Następnie wysyła tę wiadomość do MyApp-B, a MyApp-B wysyła ją do MyApp-C.
Istnieje jednak scenariusz niepowodzenia. W tym scenariuszu MyApp-A nie wysyła wiadomości do MyApp-B. Następnie wysyła wiadomość do MyApp-D, która z kolei wysyła ją do MyApp-C.
Bellow to mój kod do 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();
}
}
Rozważałem użyciewielbłąd-ftp ale to nie zadziałałoby, ponieważ MyApp-C nie wiedziałby, że MyApp-B umarł i nie wiedziałby, że musiał pobrać z MyApp-D.
Teraz mam kilka problemów i pytań:
Jak wysłać wiadomość (w tym przypadku plik) z MyApp-A do MyApp-B, która jest inną aplikacją? Co właściwie powinienem włożyć.to(String)
metoda Java DSL?Jak właściwie kodować MyApp-B? Jak sprawić, że otrzyma wiadomość od A (która jest inną aplikacją, prawdopodobnie na innej maszynie) i wyślij ją do MyApp-C (zakładam, że jeśli dowiem się, jak wysłać z MyApp-A do MyApp-B, Będę wiedział, jak wysłać z MyApp-B do MyApp-C)?W jaki sposób MyApp-A wykryje niepowodzenie MyApp-B?Jakiego składnika wielbłąda należy użyć?Gdybyś mógł przekazać jakąkolwiek opinię na temat mojego kodu i sposobu rozwiązania problemu, byłbym bardziej wdzięczny.