Akka远程处理绑定到主机名而不是绑定主机名

时间:2016-01-28 12:11:43

标签: networking akka akka-remote-actor

上下文

我正在尝试在节点上运行akka应用程序,并使用akka远程处理功能使其与其他节点一起使用。

我的节点有一个IP地址<?php session_start(); include_once 'maindb.php'; $mysqli = mysqli_connect($dbMain['host'], $dbMain['user'], $dbMain['pass'], $dbMain['db']) or die('Kunde inte ansluta till databasen:'.mysqli_error($Maincon)); if(!$result = $mysqli->query( "SELECT tblDokument.ID, tblMail.inkommet, tblDokument.datum, tblDokument.Moms, tblDokument.pris, tblDokument.Org, tblVerifikat.verifikatNo, tblLevMallar.OrgNr, tblLevMallar.name, tblDokumentSvg.svg, tblDokumentPdf.pdf FROM tblDokument LEFT OUTER JOIN tblVerifikat ON tblDokument.ID = tblVerifikat.ID LEFT OUTER JOIN tblMail ON tblDokument.tblMail_ID = tblMail.ID LEFT OUTER JOIN tblLevMallar ON tblDokument.orgnr = tblLevMallar.OrgNr LEFT OUTER JOIN tblDokumentSvg ON tblDokument.ID = tblDokumentSvg.dokumentid LEFT OUTER JOIN tblDokumentPdf ON tblDokument.ID = tblDokumentPdf.id WHERE tblVerifikat.verifikatNo <> 'Makulerad' ORDER BY tblDokument.ID")) { echo "VERYTHING IS BAD"; } else { $i = 0; while ($row = $result->fetch_assoc()) { $tempPDF = $row["pdf"]; $size = filesize($tempPDF); header('Content-type: application/pdf'); header("Content-length: $size"); header('Content-Disposition: attachment; filename="new.pdf")'); $tempArray[$i] = array( "id" => $row["ID"], "arrived" => substr($row["inkommet"], 0, 10), "booked" => $row["datum"], "verification" => $row["verifikatNo"], "org" => $row["name"], "price" => $row["pris"], "stax" => $row["Moms"], "pic" => base64_encode($row["svg"]), "pdf" => $tempPDF); $i++; } // HEADER STUFF $done = json_encode($tempArray); $size = strlen($done); header('Content-type: application/json'); header("Content-length: $size"); header('Connection: close'); echo $done; } $result->close(); $mysqli->close(); ?> ,并且有一个外部IP 10.254.55.10,重定向到前者。这个外部IP是我希望其他节点与我联系的IP。

从我的akka​​应用程序配置中提取:

10.10.10.44

我知道网络端的一切正常,因为当我用netcat监听我的IP时,我可以使用外部IP通过telnet向自己发送消息。

换句话说,在单独的shell中运行这两个命令时:

akka { remote { netty.tcp { hostname = "10.10.10.44" port = 2551 bind-hostname = "10.254.55.10" bind-port = 2551 } } }

$ nc -l 10.254.55.10 2551

我能够与自己沟通,证明网络重定向在两个IP之间正常工作。

问题

启动应用程序时,它会因绑定错误而崩溃:

$ telnet 10.10.10.44 2551

我认为导致崩溃的原因是它试图绑定到本地不存在的IP(即INFO Remoting - Starting remoting ERROR a.r.t.n.NettyTransport - failed to bind to /10.10.10.44:2551, shutting down Netty transport Exception in thread "main" java.lang.ExceptionInInitializerError [...] Caused by: org.jboss.netty.channel.ChannelException: Failed to bind to: /10.10.10.44:2551 [...] Caused by: java.net.BindException: Cannot assign requested address [...] INFO a.r.RemoteActorRefProvider$RemotingTerminator - Shutting down remote daemon. )。但是我首先要理解的是,为什么akka甚至试图绑定到10.10.10.44,因为它不是我的bind-hostname(10.10.10.44)。 This doc page在这件事上似乎很清楚,但它不起作用......

1 个答案:

答案 0 :(得分:3)

我正在使用的项目基于akka 2.3.4,其中bind-hostnamebind-port配置键不存在。我当时升级到最新版本,akka 2.4.1,它解决了这个问题。