concurrency - Akka 会淘汰 Camel 吗?

标签 concurrency apache-camel akka enterprise-integration

我对 Akka 的理解是,它提供了一个模型,多个隔离的线程可以通过该模型以高度并发的方式相互通信。它使用“ Actor 模型”,其中每个线程都是一个“ Actor ”,有特定的工作要做。您可以编排在什么条件下将哪些消息传递给哪些参与者。

我以前使用过 Camel,对我来说,现在 Akka 如此成熟且文档齐全,我觉得它有点失去光彩/实用性。据我了解,Camel 是关于企业集成的,即将多个不同的系统集成在一起,通常以某种服务总线方式。

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

  • 在 FTP 服务器上轮询文件,一旦找到...
  • 将该文件的内容转换为 POJO,然后...
  • 如果 POJO 具有特定状态,则发送电子邮件,或
  • 在所有其他情况下将 POJO 持久化到数据库

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

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

    最佳答案

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

    你自己提过:
    Akka 是实现 react 器模式的工具,即用于潜在分布式系统的基于消息的并发引擎。

    Camel 是一个用于实现企业集成模式的 DSL/框架。

    虽然在 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"/>
    

    完整示例/教程 can be found at typesafe .

    关于concurrency - Akka 会淘汰 Camel 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28074223/

    相关文章:

    ios - 快速互斥替代品

    java - 如何使用 ElastiCache 作为 Camel 幂等存储库?

    java - 我很难确定 Loop While DO 的作用范围

    java - Patterns.ask 超时后消息将转到哪里?

    java - 如何将Java线程作为嵌套类进行同步?

    java - 初始化的非最终静态变量是线程安全的吗?

    java - Camel Jpa绕过@consumed

    java - Akka Actor 和 future : Understanding by example

    java - Apache 弗林克 : Standalone Cluster tries to connect with username "flink"

    multithreading - 在pthread中,如何可靠地将信号传递给另一个线程?