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.

questionAnswers(1)

yourAnswerToTheQuestion