2016-09-19 36 views
0

我们正在使用Apache Camel实现一个Web Service,它有许多调用Java方法的(20-50)“direct:”路由。每种方法基本上都有一条路径,无论是业务规则处理还是DAO访问方法。所有路线使用from("direct:").to("direct"),但从未使用任何其他组件。这是Apache Camel的一个不好的用例吗?

尽管这看起来像是将系统从标准的Controller-> bo-> dao图层中分离出来,但它增加了不必要的骆驼路线的簿记。

更好的替代方案将只简单地定义Java接口的业务对象和道层,其中对其他服务的附加接口(外部到系统中,就像file://,或者http://),这将是内部的依赖性请求业务对象或控制器。这个附加接口的实现将使用Apache Camel与这些外部服务进行通信。

作为一个便笺,我正在考虑如何说服我现在的同事们看到我的观点。

想法?

tldr; 应该在只有1或2个应用程序存在的情况下使用Apache Camel吗?

+0

嗨,欢迎来到SO。不幸的是,你的问题是waaay对这种格式太模糊 - 请参阅[Stack Overflow是一个论坛吗?](http://meta.stackexchange.com/q/92107/195481)。在这里问一个问题,你确实需要找到一个你正在寻找解决方案的问题,而不是讨论的话题。 – Jeff

+0

嘿,对不起,如果我引起了进攻 - 有很多人在这里留下了非常冷的信息,我试图增加一点个性,以避免这种情况,但这可能会结束敌对。我之所以说这个问题不适合这个网站,是因为它可能会以任何方式争论 - 这些事情可能是非常情景化的。更好地提供更多细节并获得更好的答案。正如你指出的那样,这不是我的专业,所以我可能是错的。然而,我花了10多年的编程,所以我确实有一些想法。 – Jeff

+0

我认为这个问题可能会更清晰一些代码示例(例如,通过整个系统显示一条典型消息所采用的简化路径);另外,它几乎肯定会更适合[程序员.se](http://programmers.stackexchange.com/)。 –

回答

1

我已经使用了涉及各种复杂性,协议和模式的20个系统的应用程序。我知道有50多个系统涉及的其他地方。唯一的限制是你的设计,性能等。

Apache Camel是一个中间件框架。从本质上讲,您的业务逻辑不应该知道数据如何传递或传递到什么位置,而应该知道它应该传递什么。骆驼应该照顾其余的。

顺便说一句,你的中间件不是跟外部世界交谈吗?为什么只使用direct而不使用其他组件?

您还可以使用bean集成来隐藏中间件。这给了你更多的解耦。看到这里:http://camel.apache.org/bean-integration.html

这真的取决于你想要完成什么以及你的要求是什么。

0

那么,对于您的具体使用情况,我会说您只需使用常规的Java实现就可以让Camel被用作系统与外部世界之间的粘合剂。像Souciance explains in his answer一样,当你需要与多个系统集成时,骆驼真的很闪亮,所以你至少应该保持它与外界沟通。

但是,如果已经使用Camel实现了系统的内部部件,那么我不得不说它将额外的努力用纯Java替换它并没有什么意义,特别是因为当前的实现使您能够使该系统更强大,例如通过使用高性能的MQ作为direct路由的替代品,这将有助于您的系统对故障更具抵抗力,并且稍后更容易解耦,更不用提DAO对象周围的路由使得当您的系统负载增长时,更容易实现数据库更新的批处理。