下面是一个简单的actor,它需要进行HTTP调用以从API接收数据.根据Akka HTTP核心请求级客户端API,只需隐式ActorSystem和ActorMaterializer需要.
class MyActor extends Actor {
import context.system
implicit val materializer = ActorMaterializer()
override def receive: Receive = {
case _ => {
val responseFuture: Future[HttpResponse] = Http().singleRequest(HttpRequest(uri = "http://akka.io"))
responseFuture onComplete {
case Success(res) => println(res)
case Failure(t) => println("An error has occured: " + t.getMessage)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在尝试编译应用程序时,我收到以下错误消息:
Error:(18, 48) ambiguous implicit values: both value context in trait Actor of type => akka.actor.ActorContext and method system in trait ActorContext …Run Code Online (Sandbox Code Playgroud) 我使用Scala中的Akka Streams使用AWS Java SDK从AWS SQS队列进行轮询.我创建了一个ActorPublisher,它以两秒的间隔使消息出列:
class SQSSubscriber(name: String) extends ActorPublisher[Message] {
implicit val materializer = ActorMaterializer()
val schedule = context.system.scheduler.schedule(0 seconds, 2 seconds, self, "dequeue")
val client = new AmazonSQSClient()
client.setRegion(RegionUtils.getRegion("us-east-1"))
val url = client.getQueueUrl(name).getQueueUrl
val MaxBufferSize = 100
var buf = Vector.empty[Message]
override def receive: Receive = {
case "dequeue" =>
val messages = iterableAsScalaIterable(client.receiveMessage(new ReceiveMessageRequest(url).getMessages).toList
messages.foreach(self ! _)
case message: Message if buf.size == MaxBufferSize =>
log.error("The buffer …Run Code Online (Sandbox Code Playgroud)