当前位置: 首页 > news >正文

做网站月入国产网站开发工具公司

做网站月入,国产网站开发工具公司,湖南服务专业的网站制作,泰国购物网站大全上篇我们讨论了Akka-Remoting。我们说Akka-Remoting是一种点对点的通讯方式#xff0c;能使两个不同JVM上Akka-ActorSystem上的两个Actor之间可以相互沟通。Akka-Remoting还没有实现完全的Actor位置透明#xff08;location transparency#xff09;#xff0c;因为一个Act…    上篇我们讨论了Akka-Remoting。我们说Akka-Remoting是一种点对点的通讯方式能使两个不同JVM上Akka-ActorSystem上的两个Actor之间可以相互沟通。Akka-Remoting还没有实现完全的Actor位置透明location transparency因为一个Actor还必须在获得对方Actor确切地址信息后才能启动与之沟通过程。Akka-Remoting支持“远程查找”和“远程构建”两种沟通方式。由于篇幅所限我们只介绍了“远程查找”。在这一篇里我们将会讨论“远程构建”方式。 同样我们先通过项目结构来分析 lazy val local (project in file(.)).settings(commonSettings).settings(name : remoteCreateDemo).aggregate(calculator,remote).dependsOn(calculator)lazy val calculator (project in file(calculator)).settings(commonSettings).settings(name : calculator)lazy val remote (project in file(remote)).settings(commonSettings).settings(name : remoteSystem).aggregate(calculator).dependsOn(calculator) 远程构建的过程大致是这样的由local通知remote启动构建Actorremote从本地库中查找Actor的类定义class并把它载入内存。由于驱动、使用远程Actor是在local进行的所以local,remote项目还必须共享Calculator包括Calculator的功能消息。这项要求我们在.sbt中用aggregate(calculator)来协同编译。 我们把Calculator的监管supervisor也包括在这个源码文件里。现在这个calculator是个包括监管、功能、消息的完整项目了。Calculator源代码如下 package remoteCreation.calculatorimport akka.actor._ import scala.concurrent.duration._object Calcultor {sealed trait MathOpscase class Num(dnum: Double) extends MathOpscase class Add(dnum: Double) extends MathOpscase class Sub(dnum: Double) extends MathOpscase class Mul(dnum: Double) extends MathOpscase class Div(dnum: Double) extends MathOpssealed trait CalcOpscase object Clear extends CalcOpscase object GetResult extends CalcOpsdef props Props(new Calcultor)def supervisorProps Props(new SupervisorActor) }class Calcultor extends Actor with ActorLogging {import Calcultor._var result: Double 0.0 //internal stateoverride def receive: Receive {case Num(d) result dcase Add(d) result dcase Sub(d) result - dcase Mul(d) result * dcase Div(d) val _ result.toInt / d.toInt //yield ArithmeticExceptionresult / dcase Clear result 0.0case GetResult sender() ! sResult of calculation is: $result}override def preRestart(reason: Throwable, message: Option[Any]): Unit {log.info(sRestarting calculator: ${reason.getMessage})super.preRestart(reason, message)} }class SupervisorActor extends Actor {def decider: PartialFunction[Throwable,SupervisorStrategy.Directive] {case _: ArithmeticException SupervisorStrategy.Resume}override def supervisorStrategy: SupervisorStrategy OneForOneStrategy(maxNrOfRetries 5, withinTimeRange 5 seconds){decider.orElse(SupervisorStrategy.defaultDecider)}val calcActor context.actorOf(Calcultor.props,calculator)override def receive: Receive {case msg _ calcActor.forward(msg)}} 与上一个例子的”远程查找式“相同remote需要为Remoting公开一个端口。我们可以照搬.conf配置文件内容remote/src/main/resources/application.conf akka {actor {provider remote}remote {enabled-transports [akka.remote.netty.tcp]netty.tcp {hostname 127.0.0.1port 2552}log-sent-messages onlog-received-messages on} } 由于远程构建和使用是在local上进行的在remote上我们只需要启动ActorSystem就行了 import com.typesafe.config.ConfigFactory import akka.actor._object CalculatorRunner extends App {val remoteSystem ActorSystem(remoteSystem,ConfigFactory.load(application))println(Remote system started.)scala.io.StdIn.readLine()remoteSystem.terminate()} Calculator的构建是在localSystem上启动的我们需要在配置文件中描述远程构建标的还是未能实现位置透明local/src/main/resources/application.conf  akka {actor {provider remote,deployment {/calculator {remote akka.tcp://remoteSystem127.0.0.1:2552}}}remote {netty.tcp {hostname 127.0.0.1,port2554}} } 注意上面这个/calculator设置实际上指的是SupervisorActor。 现在我们可以在local上开始构建calculator然后使用它来运算了 import akka.actor._ import remoteCreation.calculator.Calcultor._ import scala.concurrent.duration._ import akka.pattern._object RemotingCreate extends App {val localSystem ActorSystem(localSystem)val calcActor localSystem.actorOf(props,name calculator) //created SupervisorActorimport localSystem.dispatchercalcActor ! ClearcalcActor ! Num(13.0)calcActor ! Mul(1.5)implicit val timeout akka.util.Timeout(1 second)((calcActor ? GetResult).mapTo[String]) foreach printlnscala.io.StdIn.readLine()calcActor ! Div(0.0)calcActor ! Div(1.5)calcActor ! Add(100.0)((calcActor ? GetResult).mapTo[String]) foreach printlnscala.io.StdIn.readLine()localSystem.terminate()} 从代码上看构建calculatorSupervisorActor过程与普通的Actor构建没分别所有细节都放在配置文件里了。但是要注意actorOf的name必须与配置文档中的设置匹配。 试运行结果与上一个例子相同。值得注意的是实际远程构建的是一个SupervisorActor。Calculator的构建是SupervisorActor构建的其中一部分。从运算结果看这个SupervisorActor也实现了它的功能。 下面是这次示范的源代码  local/build.sbt azy val commonSettings seq (name : RemoteCreateDemo,version : 1.0,scalaVersion : 2.11.8,libraryDependencies : Seq(com.typesafe.akka %% akka-actor % 2.5.2,com.typesafe.akka %% akka-remote % 2.5.2) )lazy val local (project in file(.)).settings(commonSettings).settings(name : remoteCreateDemo).aggregate(calculator).dependsOn(calculator)lazy val calculator (project in file(calculator)).settings(commonSettings).settings(name : calculator)lazy val remote (project in file(remote)).settings(commonSettings).settings(name : remoteSystem).aggregate(calculator).dependsOn(calculator) calculator/calculator.scala package remoteCreation.calculatorimport akka.actor._ import scala.concurrent.duration._object Calcultor {sealed trait MathOpscase class Num(dnum: Double) extends MathOpscase class Add(dnum: Double) extends MathOpscase class Sub(dnum: Double) extends MathOpscase class Mul(dnum: Double) extends MathOpscase class Div(dnum: Double) extends MathOpssealed trait CalcOpscase object Clear extends CalcOpscase object GetResult extends CalcOpsdef props Props(new Calcultor)def supervisorProps Props(new SupervisorActor) }class Calcultor extends Actor with ActorLogging {import Calcultor._var result: Double 0.0 //internal stateoverride def receive: Receive {case Num(d) result dcase Add(d) result dcase Sub(d) result - dcase Mul(d) result * dcase Div(d) val _ result.toInt / d.toInt //yield ArithmeticExceptionresult / dcase Clear result 0.0case GetResult sender() ! sResult of calculation is: $result}override def preRestart(reason: Throwable, message: Option[Any]): Unit {log.info(sRestarting calculator: ${reason.getMessage})super.preRestart(reason, message)} }class SupervisorActor extends Actor {def decider: PartialFunction[Throwable,SupervisorStrategy.Directive] {case _: ArithmeticException SupervisorStrategy.Resume}override def supervisorStrategy: SupervisorStrategy OneForOneStrategy(maxNrOfRetries 5, withinTimeRange 5 seconds){decider.orElse(SupervisorStrategy.defaultDecider)}val calcActor context.actorOf(Calcultor.props,calculator)override def receive: Receive {case msg _ calcActor.forward(msg)}} remote/src/main/resources/application.conf akka {actor {provider remote}remote {enabled-transports [akka.remote.netty.tcp]netty.tcp {hostname 127.0.0.1port 2552}log-sent-messages onlog-received-messages on} } remote/CalculatorRunner.scala package remoteCreation.remote import com.typesafe.config.ConfigFactory import akka.actor._object CalculatorRunner extends App {val remoteSystem ActorSystem(remoteSystem,ConfigFactory.load(application))println(Remote system started.)scala.io.StdIn.readLine()remoteSystem.terminate()} local/src/main/resources/application.conf akka {actor {provider remote,deployment {/calculator {remote akka.tcp://remoteSystem127.0.0.1:2552}}}remote {netty.tcp {hostname 127.0.0.1,port2554}} } local/RemotingCreation.scala import akka.actor._ import remoteCreation.calculator.Calcultor._ import scala.concurrent.duration._ import akka.pattern._object RemotingCreate extends App {val localSystem ActorSystem(localSystem)val calcActor localSystem.actorOf(props,name calculator) //created SupervisorActor import localSystem.dispatchercalcActor ! ClearcalcActor ! Num(13.0)calcActor ! Mul(1.5)implicit val timeout akka.util.Timeout(1 second)((calcActor ? GetResult).mapTo[String]) foreach printlnscala.io.StdIn.readLine()calcActor ! Div(0.0)calcActor ! Div(1.5)calcActor ! Add(100.0)((calcActor ? GetResult).mapTo[String]) foreach printlnscala.io.StdIn.readLine()localSystem.terminate()}                                 转载于:https://www.cnblogs.com/tiger-xc/p/7063301.html
http://wiki.neutronadmin.com/news/65536/

相关文章:

  • 常州新北区有做淘宝网站策划的吗有用模板网在线制作淘宝店铺装修制作
  • 网站修改域名中国城乡建设部证件查询网站
  • 建网站的论坛网站建设虚拟主机说明
  • 江阴市建设局网站管理通道网站制作费用多少
  • 纯静态网站 后台室内装修效果大图
  • 怎样申请网站注册网站链接到邮箱怎么做
  • 有没有专门做胜负彩的网站百度地图嵌入wordpress
  • 苏州建网站的公司哪家公司好wordpress固定链接翻页404
  • 触摸屏html网站怎么用wordpress模板
  • 建材在哪些网站做广西建设工程质量安全监督总站网站
  • 做博客网站要怎么配置的服做食品网站需要什么条件
  • 门户网站网站制作网址大全最安全实用的网址
  • 宜州做网站拟在建项目信息网官网
  • 网页网站开发工具如何应用网络营销发挥作用
  • 中国建设银行官方网站汇率商标设计怎么收费
  • 邢台做网站优化价格广州做网站企业
  • 在线ppt制作网站有哪些橙色在网站中的应用
  • 宁波网站推广平台咨询家用宽带怎样做网站服务器
  • 静态营销网站代码wordpress主题破解下载
  • 工业设计网站有那些做电影网站的流程
  • 南宁手机网站开发策划苏华建设集团网站
  • 做淘宝网站规范 百度知道iis wordpress 500错误
  • 响应式网站和传统网站异同常州本地招聘网站
  • 怎样做网站的关键字搜索功能国外网站界面
  • 网站建设规划方案.ppt自己的网站怎么做实时监控
  • 比较好的家装设计网站培训课程网站
  • 中企动力技术支持网站网站上传可以通过
  • 有关做网站项目的毕业答辩权威的顺德网站建设
  • 12306网站的建设历程企业企业网站建设
  • 欧美农庄网站模板网站如何做下一页