Akka 会淘汰 Camel 吗?
Does Akka obsolesce Camel?
我对 Akka 的 理解 是它提供了一个模型,多个独立的线程可以通过该模型以高度并发的方式相互通信。它使用 "actor model",其中每个线程都是一个 "actor",具有特定的工作要做。您可以安排在什么条件下将哪些消息传递给哪些参与者。
我以前用过 Camel,对我来说,我觉得它有点失去了它 luster/utility 现在 Akka 如此成熟且有据可查。据我了解,Camel 是关于企业集成的,即将多个不同的系统集成在一起,通常 以某种服务总线方式。
但是想一想:如果我目前正在使用 Camel 来:
- 轮询 FTP 服务器以获取文件,一旦找到...
- 将该文件的内容转换为 POJO,然后...
- 如果 POJO 具有特定状态,则发送电子邮件,或者
- 在所有其他情况下将 POJO 持久化到数据库
我可以用 Akka 做同样的事情;我可以为每个步骤(轮询 FTP、转换文件 -> POJO、电子邮件或持久化)分配 1 个 Actor,将它们连接在一起,并让 Akka 处理所有 asynchrony/concurrency.
所以尽管Akka是一个并发框架(使用actors),尽管Camel是关于集成的,但我不得不问:难道Akka不能解决Camel所做的一切吗?换句话说:在 Akka 上使用 Camel 仍然存在哪些用例?
Akka 和 Camel 是两种不同的野兽(另外一个是山,一个是动物)。
你自己提的:
Akka 是一种实现反应器模式的工具,即用于潜在分布式系统的基于消息的并发引擎。
Camel 是 DSL/framwork 实施企业集成模式的工具。
有很多东西在 Akka 中会很漂亮,但在 Camel 中很容易。交易是肯定的。然后是各种传输逻辑和选项的所有逻辑,因为 Akka 没有集成消息的抽象。然后是在 Camel 中非常出色的开发良好的 EIP,多播、拆分、聚合、XML/JSON 处理、文本文件解析、HL7,仅举几例。当然,您可以在纯 java/scala 中完成所有操作,但这不是重点。重点是能够使用 DSL 描述集成,而不是再次实现底层逻辑。
尽管如此,Akka TOGETHER with Camel 还是很有趣的。特别是使用 Scala。然后你在 actor 语义之上有 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"/>
一个完整的 sample/tutorial can be found at typesafe.
我对 Akka 的 理解 是它提供了一个模型,多个独立的线程可以通过该模型以高度并发的方式相互通信。它使用 "actor model",其中每个线程都是一个 "actor",具有特定的工作要做。您可以安排在什么条件下将哪些消息传递给哪些参与者。
我以前用过 Camel,对我来说,我觉得它有点失去了它 luster/utility 现在 Akka 如此成熟且有据可查。据我了解,Camel 是关于企业集成的,即将多个不同的系统集成在一起,通常 以某种服务总线方式。
但是想一想:如果我目前正在使用 Camel 来:
- 轮询 FTP 服务器以获取文件,一旦找到...
- 将该文件的内容转换为 POJO,然后...
- 如果 POJO 具有特定状态,则发送电子邮件,或者
- 在所有其他情况下将 POJO 持久化到数据库
我可以用 Akka 做同样的事情;我可以为每个步骤(轮询 FTP、转换文件 -> POJO、电子邮件或持久化)分配 1 个 Actor,将它们连接在一起,并让 Akka 处理所有 asynchrony/concurrency.
所以尽管Akka是一个并发框架(使用actors),尽管Camel是关于集成的,但我不得不问:难道Akka不能解决Camel所做的一切吗?换句话说:在 Akka 上使用 Camel 仍然存在哪些用例?
Akka 和 Camel 是两种不同的野兽(另外一个是山,一个是动物)。
你自己提的: Akka 是一种实现反应器模式的工具,即用于潜在分布式系统的基于消息的并发引擎。
Camel 是 DSL/framwork 实施企业集成模式的工具。
有很多东西在 Akka 中会很漂亮,但在 Camel 中很容易。交易是肯定的。然后是各种传输逻辑和选项的所有逻辑,因为 Akka 没有集成消息的抽象。然后是在 Camel 中非常出色的开发良好的 EIP,多播、拆分、聚合、XML/JSON 处理、文本文件解析、HL7,仅举几例。当然,您可以在纯 java/scala 中完成所有操作,但这不是重点。重点是能够使用 DSL 描述集成,而不是再次实现底层逻辑。
尽管如此,Akka TOGETHER with Camel 还是很有趣的。特别是使用 Scala。然后你在 actor 语义之上有 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"/>
一个完整的 sample/tutorial can be found at typesafe.