我正在尝试在节点上运行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在这件事上似乎很清楚,但它不起作用......
答案 0 :(得分:3)
我正在使用的项目基于akka 2.3.4,其中bind-hostname
和bind-port
配置键不存在。我当时升级到最新版本,akka 2.4.1,它解决了这个问题。