Akka是否淘汰Camel?

sme*_*eeb 14 concurrency apache-camel akka enterprise-integration

Akka的理解是它提供了一个模型,通过这种模型,多个隔离的线程可以以高度并发的方式相互通信.它使用"actor模型",其中每个线程都是一个具有特定工作的"actor".您可以协调哪些消息在什么条件下传递给哪些actor.

我之前使用过Camel,对我来说,我觉得它现在已经失去了它的光彩/效用,因为Akka是如此成熟和有据可查.据我了解,Camel是关于企业集成的,即将多个不同的系统集成在一起,通常以某种服务总线方式.

但想一想:如果我目前正在使用Camel:

  • 轮询FTP服务器获取文件,一旦找到...
  • 将该文件的内容转换为POJO,然后......
  • 如果POJO具有某种状态,则发送电子邮件,或
  • 在所有其他情况下,将POJO保留在数据库中

我可以和Akka做同样的事情; 我可以为每个步骤(轮询FTP,转换文件 - > POJO,电子邮件或持久化)拥有1个Actor,将它们连接在一起,让Akka处理所有的异步/并发.

所以尽管Akka是一个并发框架(使用actor),尽管Camel是关于集成的,但我不得不问:Akka不能解决Camel所做的一切吗?换句话说:在Akka上使用Camel仍然存在哪些用例?

Pet*_*der 26

Akka和Camel是两种不同的野兽(除了一种是山,一种是动物).

您自己提到:Akka是实现reactor模式的工具,即用于潜在分布式系统的基于消息的并发引擎.

Camel是实现企业集成模式的DSL /框架.

虽然在Akka中有很多东西会很漂亮,但在Camel中很容易.交易肯定.然后所有逻辑各种传输逻辑和选项,因为Akka没有集成消息的抽象.然后有很好的EIP在Camel中很棒,多播,分裂,聚合,XML/JSON处理,文本文件解析,HL7,仅举几例.当然,您可以在纯java/scala中完成所有操作,但这不是重点.关键是能够使用DSL描述集成,而不是再次实现底层逻辑.

尽管如此,Akka TOGETHER与Camel非常有趣.特别是使用Scala.然后你就在演员语义之上有了EIP,这在正确的舞台上非常强大.

来自akka.io的示例

import akka.actor.Actor
import akka.camel.{ Producer, Oneway }
import akka.actor.{ ActorSystem, Props }

class Orders extends Actor with Producer with Oneway {
  def endpointUri = "jms:queue:Orders"
}

val sys = ActorSystem("some-system")
val orders = sys.actorOf(Props[Orders])

orders ! <order amount="100" currency="PLN" itemId="12345"/>
Run Code Online (Sandbox Code Playgroud)

可以在类型安全中找到完整的示例/教程.