Fla*_*nix 5 java ftp failover load-balancing apache-camel
首先,我只是想让您知道我是骆驼的新手,最近我掌握了它的主要概念。
我正在尝试使用ActiveMQ作为代理使用Apache-Camel并使用故障转移构造将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-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();
}
}
Run Code Online (Sandbox Code Playgroud)
我曾考虑过使用camel-ftp,但由于MyApp-C不知道MyApp-B死了,也不知道它必须从MyApp-D中获取,因此无法使用。
现在我有几个问题和疑问:
.to(String)在Java DSL方法中添加什么?如果您能提供有关我的代码以及如何解决问题的任何反馈,我将不胜感激。
经过一番努力,我自己根据apache提供的负载均衡器示例找到了实现此目的的方法。
我已经将 eclipse 项目上传到我的 github 帐户,你可以在这里查看它的工作情况:
尽管我的示例确实尊重总体预期架构,但它确实有一些差异,如下所述:
此外,还不清楚 MyApp-C 何时、何地或为何用更改后的报告回复 MyApp-A。Spring DSL 代码中没有指定这种行为,到目前为止,没有人能够向我解释为什么会发生这种情况。
所以仍然存在两个问题:
如果您有兴趣,这是我创建的 README.txt,其中包含对问题的准确描述:
使用 MINA 进行负载平衡示例
此示例展示了如何轻松使用 Camel-MINA 组件来设计一个解决方案,允许在服务器关闭时重定向请求的容错解决方案。这些服务器是由 Apache MINA 框架创建的简单 TCP/IP 服务器,并在单独的 JVM 中运行。
在此示例中,负载均衡器客户端将每 10 秒生成一份报告,并将该报告发送到在 localhost:9991 上运行的 MINA 服务器。然后,该服务器将报告转发到在 localhost:9993 上运行的 MINA 服务器,然后该服务器将报告返回给客户端,以便它可以在控制台上打印它。每个 MINA 服务器都会更改消息正文,以便您可以看到报告必须使用的路由。如果由于某种原因(假设您按下了 CTRL+C),在 localhost:9991 上运行的 MINA 服务器已停止运行,那么负载均衡器将自动开始使用在 localhost:9992 上运行的 MINA 服务器。一旦该 MINA 服务器收到报告,它会将其发送回在 localhost:9993 上运行的 MINA 服务器,就像什么都没发生一样。如果 localhost:9991 再次恢复,那么负载均衡器将再次开始使用它。
无论如何,负载均衡器在尝试使用 localhost:9992 之前始终会尝试使用 localhost:9991。
运行示例
要在 Maven 存储库中编译并安装项目,请在项目的根目录下执行以下命令
mvn 干净安装
要运行该示例,请在相应的文件夹中执行以下命令:
mina1:
mvn exec:java -Pmina1mina2: mvn exec:java -Pmina2
mina3: mvn exec:java -Pmina3
负载平衡: mvn exec:java -Ploadbalancer
如果您遇到任何问题,请在 Camel 论坛上告诉我们
http://camel.apache.org/discussion-forums.html
佩德罗·马丁斯!
编辑
在上一篇文章中,我有两个问题: 1. 如何在 java dsl 中执行此操作 2. 为什么 mina 服务器发送回复。
我最终会解决问题1,但我只想说明问题2的解决方案在这里: http ://camel.465427.n5.nabble.com/Load-balancing-using-Mina-example-with-Java- DSL-td5742566.html#a5742585
感谢克劳斯先生的回答和建议。
编辑
现在这两个问题都已解决,并且它们都在同一个 git 存储库中。我希望我的代码可以帮助人们。
| 归档时间: |
|
| 查看次数: |
4580 次 |
| 最近记录: |