【发布时间】:2013-11-13 18:37:30
【问题描述】:
首先,我只想让您知道我是 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 获取。
现在我有几个问题和疑问:
- 如何将消息(在本例中为文件)从 MyApp-A 发送到另一个应用程序的 MyApp-B?我应该在 Java DSL 的
.to(String)方法中实际放入什么? - 我如何实际编码 MyApp-B?如何让它接收来自 A 的消息(这是一个不同的应用程序,可能在不同的机器上)并将其发送到 MyApp-C(我假设如果我知道如何从 MyApp-A 发送到 MyApp-B,我会知道如何从 MyApp-B 发送到 MyApp-C)?
- MyApp-A 将如何检测 MyApp-B 失败?
- 我应该使用哪种骆驼组件?
如果您能就我的代码以及如何解决问题提供任何反馈,我将不胜感激。
【问题讨论】:
标签: java ftp apache-camel load-balancing failover