在我最近的项目中,我需要用HTTP协议请求一个Web API, 在获取了响应的数据后,用这个数据向Redis 服务发起请求。为了调试这个功能,我将其放在了一个Web API中,所以这个例子涉及了Akka HTTP, for-yield(即flatMap的语法糖),通过这个例子的调试我也熟悉了flatMap与Akka HTTP结合使用时的一些细节。
为了便于说明,源代码分两次列出,在下面的叙述中我会一边说明逻辑一边增补代码。同时,记录用到的语言知识点。
import java.sql.Timestamp
import akka.actor.{ActorRef, ActorSystem, Props}
import akka.http.scaladsl.Http
import akka.http.scaladsl.marshalling.PredefinedToEntityMarshallers
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import akka.util.Timeout
import scala.concurrent.duration._
import scala.io.StdIn
import akka.http.scaladsl.model._
import akka.http.scaladsl.unmarshalling.{FromEntityUnmarshaller, PredefinedFromEntityUnmarshallers, Unmarshal}
import handler.Worker.PeriodicCalculated
import org.joda.time.DateTimeZone}
import org.joda.time.format.DateTimeFormat
import org.slf4j.bridge.SLF4JBridgeHandler
import org.slf4j.LoggerFactory