【问题标题】:Unresolved connection issue when binding to a remote server in akka http在akka http中绑定到远程服务器时未解决的连接问题
【发布时间】:2017-03-01 09:40:33
【问题描述】:

我正在尝试将 akka http 服务绑定到具有 https 配置的服务器。但我得到了未解决的地址问题。

[ERROR] [03/01/2017 13:43:28.983] [readings-data-receiver-akka.actor.default-dispatcher-3] [akka://readings-data-receiver/system/IO-TCP/selectors/$a/0] Bind failed for TCP channel on endpoint [https://enetdefender.com/graphql:443]
java.net.SocketException: Unresolved address
        at sun.nio.ch.Net.translateToSocketException(Net.java:131)
        at sun.nio.ch.Net.translateException(Net.java:157)
        at sun.nio.ch.Net.translateException(Net.java:163)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:76)
        at akka.io.TcpListener.liftedTree1$1(TcpListener.scala:56)
        at akka.io.TcpListener.<init>(TcpListener.scala:53)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at akka.util.Reflect$.instantiate(Reflect.scala:65)
        at akka.actor.ArgsReflectConstructor.produce(IndirectActorProducer.scala:96)
        at akka.actor.Props.newActor(Props.scala:213)
        at akka.actor.ActorCell.newActor(ActorCell.scala:562)
        at akka.actor.ActorCell.create(ActorCell.scala:588)
        at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:461)
        at akka.actor.ActorCell.systemInvoke(ActorCell.scala:483)
        at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:282)
        at akka.dispatch.Mailbox.run(Mailbox.scala:223)
        at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.nio.channels.UnresolvedAddressException
        at sun.nio.ch.Net.checkAddress(Net.java:101)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:218)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        ... 20 more

` 我正在添加代码,请检查它。 pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp 对象 AkkaHttp 扩展 App {

  type PR = ProducerRecord[String, String]

  val props = new Properties();
  props.put("bootstrap.servers", "localhost:9092");
  props.put("key.serializer", classOf[StringSerializer].getCanonicalName);
  props.put("value.serializer", classOf[StringSerializer].getCanonicalName);

  implicit val system = ActorSystem("readings-data-receiver")
  implicit val materializer = ActorMaterializer()
  implicit val executionContext = system.dispatcher

  val producer = new KafkaProducer[String, String](props);
  val settings = CorsSettings.defaultSettings

  val password: Array[Char] = new Array[Char]('a');// do not store passwords in code, read them from somewhere safe!


  val ks: KeyStore = KeyStore.getInstance("PKCS12")
  val keystore: InputStream = getClass.getClassLoader.getResourceAsStream("server.p12")

  //require(keystore != null, "Keystore required!")
  ks.load(keystore, password)

  val keyManagerFactory: KeyManagerFactory = KeyManagerFactory.getInstance("SunX509")
  keyManagerFactory.init(ks, password)

  val tmf: TrustManagerFactory = TrustManagerFactory.getInstance("SunX509")
  tmf.init(ks)
  val sslContext: SSLContext = SSLContext.getInstance("TLS")
  sslContext.init(keyManagerFactory.getKeyManagers, tmf.getTrustManagers, SecureRandom.getInstanceStrong)
  val https: HttpsConnectionContext = ConnectionContext.https(sslContext)

  // sets default context to HTTPS – all Http() bound servers for this ActorSystem will use HTTPS from now on
  Http().setDefaultServerHttpContext(https)

  val route: Route= cors(settings) {
    post {
      path("") {
        entity(as[String]) {payload=>
            val rec = new PR("Events", 0, UUID.randomUUID().toString, payload)
            producer.send(rec)
            println(rec)
            complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, ""))

        }
      }
    }
  }

  //val bindingFuture = Http().bindAndHandle(route, "54.85.112.231",9000,connectionContext = https)
  val bindingFuture = Http().bindAndHandle(route, "54.85.112.231:9000",connectionContext = https)

【问题讨论】:

  • FWIW 这似乎是您正在执行请求的机器的 DNS 问题。注意https://enetdefender.com/graphql:443 url 似乎是错误的。如果你想真正指定 https 端口,你应该在域 https://enetdefender.com:443/graphql 之后添加
  • 端口自动附加到地址。我没有指定端口。如何在域名后添加enetdefender.com:443/graphql
  • @abhi 分享您的 http 客户端代码可能会有所帮助
  • 我在上面的帖子中添加了代码

标签: java akka-http


【解决方案1】:

服务器绑定地址错误。 graphql 安装在阻止 akka http 服务的客户上。通过更改服务器,它工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2022-12-16
    • 2013-10-17
    • 2014-08-05
    • 1970-01-01
    相关资源
    最近更新 更多