まず始めに、私は Camel を初めて使用し、ごく最近になってその主な概念を把握したことをお知らせしたいと思います。
ActiveMQ をブローカーとして Apache-Camel を使用し、フェイルオーバー構造を使用してロードバランサーのクライアントとして jms-component を使用して、基本的な動作例を作成しようとしています。これはすべて、Java DSL のみを使用して行われます (可能な場合)。
この例は、MyApp-A、MyApp-B、MyApp-C、および MyApp-D と呼ばれる 4 つのメイン アプリで構成されています。通常のシナリオでは、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();
}
}
camel-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 が失敗したことをどのように検出しますか?
- どのキャメルコンポーネントを使用する必要がありますか?
私のコードと問題の修正方法についてフィードバックを提供していただければ、さらに感謝いたします。