akka

Does Akka obsolesce Camel?

强颜欢笑 提交于 2020-01-22 17:24:49
问题 My understanding of Akka is that it provides a model whereby multiple, isolated threads can communicate with each other in a highly concurrent fashion. It uses the "actor model", where each thread is an "actor" with a specific job to do. You can orchestrate which messages get passed to which actors under what conditions. I've used Camel before, and to me, I feel like it's sort of lost its luster/utility now that Akka is so mature and well documented. As I understand it, Camel is about

How to test that Akka actor was created in Scala

依然范特西╮ 提交于 2020-01-21 03:03:05
问题 I'm trying to write a test that will verify that my actor below is creating a heartBeatExpireWorker and a heartBeatAccepter, but I have no idea how to do it. First I was thinking I could use Mockhito mock or a spy in place of context and then verify that I called actorOf, but I can't figure out a way to inject the context without breaking the Akka testing framework. Then, I was thinking that I could send an Identify message to the workers to verify that they exist. But it occurred to me that

使用Akka的远程调用

丶灬走出姿态 提交于 2020-01-20 03:17:26
概述   正如其它RPC或者RMI框架那样,Akka也提供了远程调用的能力。服务端在监听的端口上接收客户端的调用。本文将在 《Spring与Akka的集成》 一文的基础上介绍Akka的remote调用,本文很多代码和例子来源于Akka官网的代码示例,也包含了一些适用于Spring集成的改造,本文旨在介绍Akka的远程调用的开发过程。 服务端开发 配置   Akka的默认配置文件为application.conf,如果不特别指明,Akka System都会默认加载此配置。如果你想自定义符合你习惯的名字,可以使用如下代码: final ActorSystem system = ActorSystem.create("YourSystem", ConfigFactory.load("yourconf")); 上述代码中的yourconf不包含文件后缀名,在你的资源路径下实际是yourconf.conf。   我不太想自定义加载的配置文件,而是继续使用application.conf,这里先列出其配置: include "common" akka { # LISTEN on tcp port 2552 remote.netty.tcp.port = 2552 } 这里的remote.netty.tcp.port配置属性表示使用Netty框架在TCP层的监听端口是2552

Akka 和 μJavaActors入门

一笑奈何 提交于 2020-01-20 01:24:40
Akka 和 μJavaActors μJavaActors均是java的Actor库,其中Akka提供了叫为完整的Actor开发框架,较为庞大,学习成本很高,μJavaActors 是一个轻量级Actor库,大约仅有1200行代码,比较适合入门。 一.Akka Demo Akka是一个相当成熟、强大的库,github上download下的是Akka的源码,应该使用sbt构建的工程,如果没有使用sbt经验,想导出jar还挺不容易的,推荐 Akka官网 下载akka各个组件的jar去使用,简单介绍一下helloworld 级别Akka的demo。 1.Akka的主要组件 akka-actor.jar : Actor核心组件了,定义了Acotr核心类 akka-slf4f.jar : SLF4F Logger的支持,一个打log的组件,不用太关注 akka-remote.jar : Actor做远程调用的jar,类似RFC吧 akka-cluster : actor做集群管理组件 akka-camel.jar : 对Apache Camel 集成接口 scala-library-2.11.8.jar : akka核心应该是Scala写的,这个组件就是对akka的核心支持 Akka还有很多组件,不过对于hello world级的程序简单了解几个就ok了。工程是基于eclipse的

AKKA学习(二) 未完

旧巷老猫 提交于 2020-01-19 22:49:13
Actor调用 从上面的例子中,我们可以大概的对AKKA在JAVA中的使用有一个全局的概念.这里我们在稍微细致的讲解一下. 在JAVA中使用AKKA进行开发主要有这几个步骤: 定义消息模型. 创建Actor的实现,以及业务逻辑 在需要使用AKKA的地方获取到ActorSystem,然后根据业务的数据流,获取到合适的Actor,给Actor发送消息. 在Actor的实现用,对接收到的消息进行具体的处理或转发.从而形成业务逻辑流. 下面我们分别讲解一下这几个步骤. 定义消息模型 在AKKA中的消息模型可以是任意实现了 Serializable 接口的对象.和大多数的远程调用框架一样,为了AKKA的高可用,以后可能会牵涉到远程调用和集群,那么消息模型就需要跨网络的进行传输,这就要求对消息模型进行序列化和反序列化.因此,要求消息模型必须实现 Serializable 接口.具体的序列化和反序列化在后面讲解远程调用的时候再细谈. 创建Actor的实现. 有了消息模型后,就需要有Actor对这些消息进行消费了. 在AKKA中Actor分为了 TypedActor 和 UnTypedActor . 其中 TypedActor 是 Akka 基于 Active对象 (Active Object)设计模式的一个实现,该设计模式解耦了在一个对象上执行方法和调用方法的逻辑

scala akka 修炼之路6(scala函数式柯里化风格应用场景分析)

混江龙づ霸主 提交于 2020-01-19 19:54:45
胜败兵家事不期,包羞忍耻是男儿——斗牛士fighting,fighting,fighting... 小象学习和使用scala也一段时间了,最初小象学习scala主要为了学习spark生态,可是深入学习scala的一些特性后。深深被scala函数式和面向对象的风格所折服,不得不赞美设计这门语言的设计者。小象大学阶段在使用MATLAB做数据分析和自己主动化设计时,就非常喜欢使用MATLAB的命令行和面向矩阵运算的风格编写分析代码。喜欢使用java编写层次化和清晰的模块接口,而这些Scala语言设计中都有非常好的设计。不得不说 scala的函数式和面向对象风格。能够让想想随时发生。假设你是画家,使用scala写出来的代码更像一幅充满诗意的风景画。假设你是作家,写出的将是一个扣人心弦的跌宕起伏的大篇。 scala给不同类型的程序猿不同的体验和感受。而使用scala函数式柯里化风格。能够编写出更加抽象,功能化和高效的函数式代码。 小象在定义主函数功能的时候经常出现这样的情况,函数体中的代码越写越长,本来能够拆分的功能,因为写代码的时候逻辑思绪根本停不下来,不愿意中途打断去定义那些繁琐的辅助函数,往往一个函数就一路走到头,最后使主函数代码段非常长。不便理解,功能复杂,须要后期慢慢拆分功能。小象在学习使用scala函数式柯里化风格后。在思绪停不下来又须要拆分功能的时候

akka - how to get results of several actors?

陌路散爱 提交于 2020-01-17 08:30:11
问题 I'm wondering if there any best practice to send 2 messages to 2 different actors and wait for all of them (get results of course )in order to continue executing. i.e something like: send message to actor 1 send message to actor 2 List<results> = wait.all(actor1,actor2) 回答1: You are probably looking for the ask pattern in combination with a Future.sequence or a for -comprehension: import akka.pattern.ask case object Request implicit val timeout = Timeout(5 seconds) // needed for `?` below //

How to map a source onto another?

感情迁移 提交于 2020-01-16 13:18:06
问题 I have two case classes case class Color (name: String, shades: List[Shade] = List.empty) case class Shade (shadeName: String) I also have parsers for both: object ColorParser { def apply( s: String): Either[List[SomethingElse], Color] = { val values = s.split("\\|", -1).map(_.trim).toList validateColor(values).leftMap(xs => xs.toList).toEither } } object ShadesParser { def apply(s: String) : Either[List[SomethingElse], Shade] = { val values = s.split('|').map(_.trim).toList validateShade

Akka IO(Tcp) get reason of CommandFailed

有些话、适合烂在心里 提交于 2020-01-16 05:25:07
问题 I have the following example of Actor using IO(Tcp) https://gist.github.com/flirtomania/a36c50bd5989efb69a5f For the sake of experiment I've run it twice, so it was trying to bind to 803 port. Obviously I've got an error. Question: How can I get the reason why "CommandFailed"? In application.conf I have enabled slf4j and debug level of logs, then I've got an error in my logs. DEBUG akka.io.TcpListener - Bind failed for TCP channel on endpoint [localhost/127.0.0.1:803]: java.net.BindException:

Akka Scala actor scheduled message does not appear to fire

好久不见. 提交于 2020-01-15 08:27:16
问题 In experimenting with Akka actors, I cooked up a use case which doesn't quite work as expected. I've defined an actor, MyActor which receives a "start" message. This message kicks off a scheduler which should relays a message "request" to it self every 1 second . Here's the code: import akka.actor._ import scala.concurrent.Await import scala.concurrent.duration._ import akka.pattern.gracefulStop import scala.concurrent.ExecutionContext.Implicits.global object ScheduledActors { def main(args: