Akka编程
文章平均质量分 74
杨过悔
这个作者很懒,什么都没留下…
展开
-
使用 PartialFunction 链来扩展actor
使用 PartialFunction 链来扩展actor有一个稍高级但是非常有用的方法是定义基础的消息处理器并通过继承或委托来对它进行扩展,使用 PartialFunction.orElse 链.abstract class GenericActor extends Actor { // to be defined in subclassing actor def spec转载 2015-05-10 13:41:00 · 507 阅读 · 0 评论 -
重写监管策略
import akka.actor.SupervisorStrategy.{Escalate, Restart}import akka.actor.{Actor, Props, OneForOneStrategy}import akka.actor.Actor.Receiveimport scala.concurrent.ExecutionContext.Implicits.globa原创 2015-08-18 15:38:39 · 986 阅读 · 0 评论 -
构建一个完整的Akka
import akka.actor.{Props, ActorRef, Actor}import scala.concurrent.duration._import scala.concurrent.ExecutionContext.Implicits.globaltrait AttendantResponsiveness { val maxResponseTimeMS: I转载 2015-08-17 21:15:53 · 709 阅读 · 0 评论 -
Fire and Forget模式
这是发送消息的推荐方式,不会阻塞地等待消息。它拥有最好的并发性和可扩展性。actor ! "hello"//oractor.tell("hello", actor)!操作符实际上暗地里还做了一件事儿,就是将发送者自身作为隐式参数传递。在AKKA的实现如下所示:abstract class ActorRef ... { final def tell(msg: Any,转载 2015-06-08 22:08:55 · 5729 阅读 · 0 评论 -
akka构建简单分布式应用
http://www.cnblogs.com/hequn/articles/3764630.html当程序的要求达到一台计算机的极限时,我们便需要将程序分布式化,让程序运行在多台计算机上。akka提供了remote actor用来构建分布式应用。一、remote actor1.Actor path actor的路径设计采用了类似URL的形式,即scheme://d转载 2015-06-08 11:14:54 · 683 阅读 · 0 评论 -
Remote Actor
Akka的设计目标就是为分布式准备的,因此所有Actor之间的交互都是通过消息,且所有动作都是异步的。这种做法就是为了确保Akka的所有功能无论是在单独的JVM,还是包含了成百上千机器的Cluster,都是可用的。然而,本地与分布式总是存在区别,主要牵涉到两点:消息需要支持序列号;消息传递的可靠性问题;为了保证本地处理与分布式处理的透明化,Akka几乎没有特别为Re转载 2015-06-19 21:08:56 · 610 阅读 · 0 评论 -
Future辅助方法
Future fallbackTo 将两个 Futures 合并成一个新的 Future, 如果第一个Future失败了,它将持有第二个 Future 的成功值。val future4 = future1 fallbackTo future2 fallbackTo future3你也可以使用zip操作将两个 Futures 组合成一个新的持有二者成功结果的tuple的 Future转载 2015-05-10 21:12:16 · 774 阅读 · 0 评论 -
Future定义次序
由于回调的执行是无序的,而且可能是并发执行的, 当你需要一组有序操作的时候需要一些技巧。但有一个解决办法是使用 andThen. 它会为指定的回调创建一个新的 Future , 这个 Future 与原先的 Future 拥有相同的结果, 这样就可以象下例一样定义次序:val result = Future { loadPage(url) } andThen { case Left转载 2015-05-10 21:07:16 · 581 阅读 · 0 评论 -
Future回调
有时你只需要监听 Future 的完成事件, 对其进行响应,不是创建新的Future,而仅仅是产生副作用. Akka 为这种情况准备了 onComplete, onSuccess 和 onFailure, 而后两者仅仅是第一项的特例。future onSuccess { case "bar" ⇒ println("Got my bar alright!") case x转载 2015-05-10 21:01:54 · 758 阅读 · 0 评论 -
组合 Futures
组合 Futures上例中的 comprehension 是对 Future进行组合的例子. 这种方法的常见用例是将多个 Actor的回应组合成一个单独的计算而不用调用 Await.result 或 Await.ready 来阻塞地获得每一个结果. 先看看使用 Await.result 的例子:val f1 = ask(actor1, msg1)val f2 = ask(acto转载 2015-05-10 20:55:48 · 554 阅读 · 0 评论 -
创建一个监管策略
以下更加深入地讲解错误处理的机制和可选的方法。为了演示我们假设有这样的策略:import akka.actor.OneForOneStrategyimport akka.actor.SupervisorStrategy._import akka.util.duration._ override val supervisorStrategy = OneForOneStra转载 2015-05-10 21:46:10 · 1056 阅读 · 0 评论 -
Future异常
由于 Future 的结果是与程序的其它部分并发生成的,因此异常需要作特殊的处理。 不管是 Actor 或是派发器正在完成此 Future, 如果抛出了 Exception ,Future 将持有这个异常而不是一个有效的值. 如果 Future 持有 Exception, 调用 Await.result 将导致此异常被再次抛出从而得到正确的处理.通过返回一个其它的结果来处理 Excep转载 2015-05-10 21:14:07 · 2201 阅读 · 0 评论 -
For Comprehensions
For Comprehensions由于 Future 拥有 map, filter 和 flatMap 方法,它可以方便地用于 ‘for comprehension’:val f = for { a ← Future(10 / 2) // 10 / 2 = 5 b ← Future(a + 1) // 5 + 1 = 6 c ← Future(a - 1) //转载 2015-05-10 20:43:38 · 536 阅读 · 0 评论 -
将日志源转换为字符串和类
将日志源转换为字符串和类在运行时将源对象转换成要插入 LogEvent 的源字符串和类的规则是使用隐式参数的方式实现的, 因此是可配置的: 只需要创建你自己的 LogSource[T] 实例并将它放在创建logger的作用域中即可。import akka.event.LogSourceimport akka.actor.ActorSystem object MyType {原创 2015-05-10 15:38:04 · 600 阅读 · 0 评论 -
定时器 (Scala)
有时需要设定将来发生的事情,这时该怎么办? ActorSystem 搞定一切! 在那儿你能找到 scheduler 方法,它返回一个 akka.actor.Scheduler 实例, 这个实例在每个Actor系统里是唯一的,用来指定一段时间后发生的行为。请注意定时任务是使用 ActorSystem 的 MessageDispatcher 执行的.你可以计划向actor发送消息或执行任务原创 2015-05-10 18:27:58 · 6964 阅读 · 0 评论 -
日志线程与MDC中的Akka源
日志线程与MDC中的Akka源日志的记录是异步的,完成日志记录的线程被保存在 Mapped Diagnostic Context (MDC) 的 sourceThread 属性里. 在 Logback 的模式配置中线程名可以通过 %X{sourceThread} 指定: %date{ISO8601} %-5level %logger{36} %X{sourceThre转载 2015-05-10 15:47:15 · 808 阅读 · 0 评论 -
高压订单负荷处理
1.最近喜欢画图来客观一些实际中的问题,都是一些脑海里的方案,记录之原创 2016-04-17 21:03:10 · 357 阅读 · 0 评论