hao898 发表于 2023-9-5 08:40:46

Akka了解

概念
Akka是编译Java和scala开发的高并发、分布式、弹性的消息驱动应用程序的工具。

一个工具为什么能通过编译实现高并发、分布式?
1)使用actor和stream使得编译的系统能做简单并发和分布式系统。
2)可恢复性。使用了reactive模型,具有对错误自愈功能。
3)高性能。支持5000万消息/秒单机并发。较小的内存脚印,每GB能记录250万actors。
4)可伸缩性和去中心化。通过负载均衡路由到合适的工作节点。使用CQRS架构是的集群分片处理。使用CRDT解决最终一致性算法。
5)反应器(reactive)的流数据处理。采用异步非阻塞模型实现。

怎么使用
官方一个简单示例,地址:Get Started with Lightbend Technologies

http://pic3.zhimg.com/v2-408b5b5f5253a3d9c849755fbe1e12ba_r.jpg
点击下载,使用Idea打开。我使用的scala版本的,也可以选择java版本。
下面是示例的代码:
//#full-example
package com.example

import akka.actor.{ Actor, ActorLogging, ActorRef, ActorSystem, Props }

//#greeter-companion
//#greeter-messages
object Greeter {
//#greeter-messages
def props(message: String, printerActor: ActorRef): Props = Props(new Greeter(message, printerActor))
//#greeter-messages
final case class WhoToGreet(who: String)
case object Greet
}
//#greeter-messages
//#greeter-companion

//#greeter-actor
class Greeter(message: String, printerActor: ActorRef) extends Actor {
import Greeter._
import Printer._

var greeting = ""

def receive = {
    case WhoToGreet(who) =>
      greeting = message + ", " + who
    case Greet         =>
      //#greeter-send-message
      printerActor ! Greeting(greeting)
      //#greeter-send-message
}
}
//#greeter-actor

//#printer-companion
//#printer-messages
object Printer {
//#printer-messages
def props: Props = Props
//#printer-messages
final case class Greeting(greeting: String)
}
//#printer-messages
//#printer-companion

//#printer-actor
class Printer extends Actor with ActorLogging {
import Printer._

def receive = {
    case Greeting(greeting) =>
      log.info("Greeting received (from " + sender() + "): " + greeting)
}
}
//#printer-actor

//#main-class
object AkkaQuickstart extends App {
import Greeter._

// Create the 'helloAkka' actor system
val system: ActorSystem = ActorSystem("helloAkka")

//#create-actors
// Create the printer actor
val printer: ActorRef = system.actorOf(Printer.props, "printerActor")

// Create the 'greeter' actors
val howdyGreeter: ActorRef =
    system.actorOf(Greeter.props("Howdy", printer), "howdyGreeter")
val helloGreeter: ActorRef =
    system.actorOf(Greeter.props("Hello", printer), "helloGreeter")
val goodDayGreeter: ActorRef =
    system.actorOf(Greeter.props("Good day", printer), "goodDayGreeter")
//#create-actors

//#main-send-messages
howdyGreeter ! WhoToGreet("Akka")
howdyGreeter ! Greet

howdyGreeter ! WhoToGreet("Lightbend")
howdyGreeter ! Greet

helloGreeter ! WhoToGreet("Scala")
helloGreeter ! Greet

goodDayGreeter ! WhoToGreet("Play")
goodDayGreeter ! Greet
//#main-send-messages
}
//#main-class
//#full-example

运行结果:
Greeting received (from Actor): Hello, Scala
Greeting received (from Actor): Howdy, Akka
Greeting received (from Actor): Good day, Play
Greeting received (from Actor): Howdy, Lightbend
上面结果表示:程序是并发运行的。如最后一行goodDayGreeter ! WhoToGreet("Play")在结果中是第二行就已经执行。

总结
上面从表象上已经大概能了解Akka是做什么事情的了。通过Akka提供的Api并且合理的使用它就可以简单的实现分布式、高性能的Java或者scala程序了。
如果需要深入对其工作原理进行了解,需要研究actor运作机制,后面有时间再学习。
页: [1]
查看完整版本: Akka了解