Concurrency 阿克卡淘汰骆驼了吗?

Concurrency 阿克卡淘汰骆驼了吗?,concurrency,apache-camel,akka,enterprise-integration,Concurrency,Apache Camel,Akka,Enterprise Integration,我对Akka的理解是,它提供了一个模型,使多个独立的线程能够以高度并发的方式彼此通信。它使用“参与者模型”,其中每个线程都是一个“参与者”,有一个特定的任务要做。您可以安排在什么条件下将哪些消息传递给哪些参与者 我以前用过骆驼,对我来说,现在Akka已经很成熟,并且有很好的记录,我觉得它已经失去了它的光泽/效用。据我所知,Camel是关于企业集成的,也就是说,通常以某种服务总线的方式将多个不同的系统集成在一起 但请想一想:如果我目前正在使用Camel: 轮询FTP服务器以获取文件,一旦找到 将

我对Akka的理解是,它提供了一个模型,使多个独立的线程能够以高度并发的方式彼此通信。它使用“参与者模型”,其中每个线程都是一个“参与者”,有一个特定的任务要做。您可以安排在什么条件下将哪些消息传递给哪些参与者

我以前用过骆驼,对我来说,现在Akka已经很成熟,并且有很好的记录,我觉得它已经失去了它的光泽/效用。据我所知,Camel是关于企业集成的,也就是说,通常以某种服务总线的方式将多个不同的系统集成在一起

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

  • 轮询FTP服务器以获取文件,一旦找到
  • 将该文件的内容转换为POJO,然后
  • 如果POJO处于特定状态,则发送电子邮件,或
  • 在所有其他情况下,将POJO持久化到数据库
我可以对阿卡做同样的事情;我可以为每个步骤(轮询FTP、转换文件->POJO、电子邮件或持久化)指定一个参与者,将它们连接在一起,让Akka处理所有异步/并发


所以,即使Akka是一个并发框架(使用actors),即使Camel是关于集成的,我还是要问:Akka不能解决Camel所做的一切吗?换句话说:在阿克卡之上使用骆驼还有哪些使用案例?阿克卡和骆驼是两种不同的动物(除了一种是山,一种是动物)

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

Camel是用于实现企业集成模式的DSL/framwork

在阿卡,有很多事情都很美好,但在骆驼,这很容易。当然是交易。然后,所有的逻辑都包含各种传输逻辑和选项,因为Akka没有集成消息的抽象。还有一些开发良好的EIP,它们在Camel、多播、拆分、聚合、XML/JSON处理、文本文件解析、HL7等方面都非常出色,仅举几例。当然,您可以在纯java/scala中完成这一切,但这不是重点。关键是能够使用DSL描述集成,而不是再次实现底层逻辑

非诚勿扰,很有意思。特别是使用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"/>
导入akka.actor.actor
进口阿克卡骆驼。{生产商,单向}
导入akka.actor.{ActorSystem,Props}
类命令使用单向扩展演员和制作人{
def endpointUri=“jms:queue:Orders”
}
val sys=ActorSystem(“某些系统”)
val orders=sys.actorOf(道具[订单])
命令!

完整的示例/教程。

为什么没有解释就投了否决票?这不是一个骗局,表明研究工作(在我想出了一个确切的用例/场景的意义上)与代码/编程绝对相关,并且没有违反SSCCE的任何规定!Akka是一个工具包和运行时,用于在JVM上构建高度并发、分布式和弹性消息驱动的应用程序。骆驼是一个EIP。Akka是否实现了EIP模式?虽然Akka可以做Camel做的事情,但这两个软件包的重点完全不同。是的,没有解释的向下投票也是我的一个恼怒。谢谢@Petter(+1)-我想这是有道理的。在你的“阿克卡w/骆驼”示例中,我仍然没有看到穿过树木的森林:代码中发生了什么?看起来您只是在将订单POJO发送到JMS队列—我不能在Camel(没有Akka)或Akka(使用JMS客户端)中这样做吗?再次感谢!当然,这是一个非常简单的例子。请阅读答案中的链接以了解更多示例和详细信息。其本质是,即使是akka也将Camel推广为基于akka的应用程序的集成层!非常优雅地使用Scala的XML支持。