首先我想让你知道我是新手,最近才掌握了Camel的主要概念。
我正在尝试使用Apache-Camel和ActiveMQ作为代理,并使用jms-component作为负载均衡器的客户端创建一个基本的工作示例。如果可能的话,所有这些都只使用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-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获取。
现在我有几个问题:
1. 如何将消息(在此情况下是文件)从MyApp-A发送到另一个应用程序的MyApp-B?在Java DSL的
.to(String)
方法中,我应该放什么?2. 我该如何编写MyApp-B?如何使其从A(可能是不同机器上的不同应用程序)接收消息并将其发送到MyApp-C(如果我找出了如何从MyApp-A发送到MyApp-B,我会知道如何从MyApp-B发送到MyApp-C)?
3. MyApp-A如何检测到MyApp-B失败?
4. 我应该使用哪个camel组件?
如果您能对我的代码提供任何反馈,并帮助解决问题,我将不胜感激。