Tcp 哈普洛西背后的阿克卡
我有两个系统:系统1运行akka和HAProxy,系统2运行向akka发出请求的REST组件 Akka在系统1的端口4241上运行。当没有HAProxy时,系统2能够连接到系统1。在系统1上安装HAProxy后,从系统2到系统1的请求出错,日志如下: 错误[deal akka.actor.default-dispatcher-18]EndpointWriter-正在删除 非本地的消息[类akka.actor.actorSelectMessage] 接受者[演员]。tcp://akkaSystemName@服务器1IP:42431/]]到达 [阿卡。tcp://akkaSystemName@Server1IP:42431]入站地址为 [阿卡。tcp://akkaSystemName@服务器1IP:4241] HAProxy在42431上运行 HAProxy配置如下所示:Tcp 哈普洛西背后的阿克卡,tcp,akka,haproxy,akka-cluster,Tcp,Akka,Haproxy,Akka Cluster,我有两个系统:系统1运行akka和HAProxy,系统2运行向akka发出请求的REST组件 Akka在系统1的端口4241上运行。当没有HAProxy时,系统2能够连接到系统1。在系统1上安装HAProxy后,从系统2到系统1的请求出错,日志如下: 错误[deal akka.actor.default-dispatcher-18]EndpointWriter-正在删除 非本地的消息[类akka.actor.actorSelectMessage] 接受者[演员]。tcp://akkaSystem
listen akka_tcp :42431
mode tcp
option tcplog
balance leastconn
server test1 Server1IP:4241 check
server test2 Server1IP:4241 check
akka配置如下:
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
netty.tcp {
hostname = "Server1IP"
port = 4241
transport-protocol = tcp
# Sets the send buffer size of the Sockets,
# set to 0b for platform default
send-buffer-size = 52428800b
# Sets the receive buffer size of the Sockets,
# set to 0b for platform default
receive-buffer-size = 52428800b
maximum-frame-size = 52428800b
}
}
如有任何建议,将不胜感激 更新答案:
也许Akka远程处理不应该与负载平衡器一起工作。看看它的这一部分:
Akka Remoting是一个用于连接参与者系统的通信模块
以点对点的方式,它是阿卡的基础。
集群。远程处理的设计由两个(相关的)设计驱动
决定:
1.相关系统之间的通信是对称的:如果系统a可以连接到系统B,那么系统B也必须能够连接
独立地建立一个系统
2.就连接模式而言,通信系统的作用是对称的:没有只接受连接的系统,
而且没有一个系统只启动连接
这些决定的结果是不可能
使用预定义的角色安全地创建纯客户端-服务器设置
(2)并使用涉及网络地址的设置
转换或负载平衡器(违反假设1)
对于客户机-服务器设置,最好使用HTTP或Akka I/O
对于您的情况,在system 1上使用Akka HTTP或Akka I/O来接受和回答system 2的请求似乎是合理的
旧答案: 您必须在Akka配置中设置
bind port
属性。以下是引自:
对于您的端口,它应该是这样的:
port = 42431
bind-port = 4241
不,它不起作用。系统1未在端口42431上启动。它说这个端口已经被使用了。在haproxy.BTW的上述案例中,我使用的是akka 2.3.14。是的,
bind port
选项在版本2.3.14中不存在。但这可能对你没有帮助。看看我上面更新的答案。
port = 42431
bind-port = 4241