我正在嘗試使用akka http生成PUT請求,其中的休息服務終點按照預期的方式使用curl完成,但是當通過創建Http生成時顯示超時錯誤連接。Akka-Http:連接超時過期
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
import akka.stream.ActorMaterializer
import de.heikoseeberger.akkahttpcirce.CirceSupport
import io.circe.Json
import org.joda.time.DateTime
case class JobDetails (jobName: String, appId: Option[String]=None, status: Option[String]=None,runningSince:Option[Long]=None)
trait UpdateJobStatus extends CirceSupport with Config {
def UpdateJobDetails(jobDetails :JobDetails) {
implicit val actorSystem = ActorSystem("update")
implicit val materializer: ActorMaterializer = ActorMaterializer()
val DetailsList = List(
("jobName",Json.fromString(jobDetails.jobName)),
("appId",Json.fromString(jobDetails.appId.get)),
("status",Json.fromString(jobDetails.status.get)),
("runningSince",Json.fromLong(DateTime.now.getMillis)))
val jobDetailJson:Json = Json.fromFields(DetailsList)
val endpoint =Uri.from(scheme = "http",host = httpHost,port = 9000,path = "/updateJobDetails/TestJob")
val updateRequest = HttpRequest(
HttpMethods.PUT,
uri = endpoint,
entity = HttpEntity(MediaTypes.`application/json`, jobDetailJson.toString()))
Http().singleRequest(updateRequest)
}
}
object Test extends App with UpdateJobStatus{
val test = JobDetails("TestJob",Some("1234"),Some("Killed"),Some(21))
UpdateJobDetails(test)
}
錯誤:
DEBUG] [05/25/2017 01:20:02.934] [main] [EventStream(akka://UpdateService)] logger log1-Logging$DefaultLogger started
[DEBUG] [05/25/2017 01:20:02.935] [main] [EventStream(akka://UpdateService)] Default Loggers started
[DEBUG] [05/25/2017 01:20:03.122] [main] [AkkaSSLConfig(akka://UpdateService)] Initializing AkkaSSLConfig extension...
[DEBUG] [05/25/2017 01:20:03.124] [main] [AkkaSSLConfig(akka://UpdateService)] buildHostnameVerifier: created hostname verifier: [email protected]
[DEBUG] [05/25/2017 01:20:04.098] [UpdateService-akka.actor.default-dispatcher-4] [akka://UpdateService/user/pool-master/PoolInterfaceActor-0] (Re-)starting host connection pool to 0.0.0.0:9000
[DEBUG] [05/25/2017 01:20:04.315] [UpdateService-akka.actor.default-dispatcher-4] [akka://UpdateService/system/IO-TCP/selectors/$a/0] Resolving 0.0.0.0 before connecting
[DEBUG] [05/25/2017 01:20:04.333] [UpdateService-akka.actor.default-dispatcher-5] [akka://UpdateService/system/IO-DNS] Resolution request for 0.0.0.0 from Actor[akka://UpdateService/system/IO-TCP/selectors/$a/0#-1469947037]
[DEBUG] [05/25/2017 01:20:04.341] [UpdateService-akka.actor.default-dispatcher-5] [akka://UpdateService/system/IO-TCP/selectors/$a/0] Attempting connection to [/0.0.0.0:9000]
[DEBUG] [05/25/2017 01:20:14.359] [UpdateService-akka.actor.default-dispatcher-3] [akka://UpdateService/system/IO-TCP/selectors/$a/0] Connect timeout expired, could not establish connection to [0.0.0.0:9000]
雖然
curl -v -H "Content-Type: application/json" \
-X PUT http://0.0.0.0:9000/updateJobDetails/TestJob \
-d '{"jobName":"TestJob","appId":"1234","status":"Killed","runningSince":1}'
工作
你可能想嘗試連接到本地主機,而不是0.0.0.0 –
@Stefano試圖使用'localhost'而不是0.0.0.0,它的工作方式像魅力,我不知道爲什麼,你能解釋原因嗎? – Freeman