sme*_*eeb 14 concurrency apache-camel akka enterprise-integration
我对 Akka的理解是它提供了一个模型,通过这种模型,多个隔离的线程可以以高度并发的方式相互通信.它使用"actor模型",其中每个线程都是一个具有特定工作的"actor".您可以协调哪些消息在什么条件下传递给哪些actor.
我之前使用过Camel,对我来说,我觉得它现在已经失去了它的光彩/效用,因为Akka是如此成熟和有据可查.据我了解,Camel是关于企业集成的,即将多个不同的系统集成在一起,通常以某种服务总线方式.
但想一想:如果我目前正在使用Camel:
我可以和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)
可以在类型安全中找到完整的示例/教程.