Akka.Net Объединяйте в кластер разных Актеров на разных машинах в одной сети. Но акторные системы не могут найти друг друга
Я использую следующую установку. На двух разных компьютерах в одной сети я хотел бы использовать один серверный продукт на 1-м. pc, тогда как часть Gui работает на втором. ПК.
ПК один и ПК два используют разные статические IP-адреса.
Backend-продукт поддерживает одну ActorSystem (имя: ProductXY-ActorSystem)
Продукт с графическим интерфейсом поддерживает вторую ActorSystem (имя: ProductXY-ActorSystem)
Lighthouse работает на первом ПК, где работает серверная часть.
Я использую публикацию/подписку через Cluster.Tools для связи.
пожалуйста, найдите ниже конфигурационные файлы, которые я использую:
1.) ПК один: (бэкэнд, маяк)
---- бэкенд.config
akka {
stdout-loglevel = INFO
loglevel = INFO
ACTOR_SYSTEM ="ProductXY-ActorSystem"
actor {
serialize-messages = on
debug {
receive = on # log any received message
autoreceive = on # log automatically received messages, e.g. PoisonPill
lifecycle = on # log actor lifecycle changes
event-stream = on # log subscription changes for Akka.NET event stream
unhandled = on # log unhandled messages sent to actors
}
provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
serializers {
hyperion = "Akka.Serialization.HyperionSerializer, Akka.Serialization.Hyperion"
akka-pubsub = "Akka.Cluster.Tools.PublishSubscribe.Serialization.DistributedPubSubMessageSerializer, Akka.Cluster.Tools"
}
serialization-bindings {
"System.Object" = hyperion
"Akka.Cluster.Tools.PublishSubscribe.IDistributedPubSubMessage, Akka.Cluster.Tools" = akka-pubsub
"Akka.Cluster.Tools.PublishSubscribe.Internal.SendToOneSubscriber, Akka.Cluster.Tools" = akka-pubsub
}
serialization-identifiers {
"Akka.Cluster.Tools.PublishSubscribe.Serialization.DistributedPubSubMessageSerializer, Akka.Cluster.Tools" = 9
}
}
remote {
log-remote-lifecycle-events = off
dot-netty.tcp {
transport-class = "Akka.Remote.Transport.DotNetty.TcpTransport, Akka.Remote"
applied-adapters = []
transport-protocol = tcp
port = 0
hostname = "10.190.191.20" # <<-- IP to backend pc.
}
}
cluster {
roles = ["shared-cluster"]
seed-nodes = ["akka.tcp://"${akka.ACTOR_SYSTEM}"@10.190.191.20:4053"]# <<-- IP to backend pc.
}
}
-------- маяк.config
lighthouse{
actorsystem: "ProductXY-ActorSystem"
}
akka {
actor {
provider = cluster
serializers {
hyperion = "Akka.Serialization.HyperionSerializer, Akka.Serialization.Hyperion"
akka-pubsub = "Akka.Cluster.Tools.PublishSubscribe.Serialization.DistributedPubSubMessageSerializer, Akka.Cluster.Tools"
}
serialization-bindings {
"System.Object" = hyperion
"Akka.Cluster.Tools.PublishSubscribe.IDistributedPubSubMessage, Akka.Cluster.Tools" = akka-pubsub
"Akka.Cluster.Tools.PublishSubscribe.Internal.SendToOneSubscriber, Akka.Cluster.Tools" = akka-pubsub
}
serialization-identifiers {
"Akka.Cluster.Tools.PublishSubscribe.Serialization.DistributedPubSubMessageSerializer, Akka.Cluster.Tools" = 9
}
}
remote {
log-remote-lifecycle-events = DEBUG
dot-netty.tcp {
transport-class = "Akka.Remote.Transport.DotNetty.TcpTransport, Akka.Remote"
applied-adapters = []
transport-protocol = tcp
#will be populated with a dynamic host-name at runtime if left uncommented
public-hostname = "10.190.191.20" # <<-- IP to backend pc.
port = 4053
}
}
cluster {
#will inject this node as a self-seed node at run-time
seed-nodes = []
roles = [lighthouse]
}
}
и на пк2:
-------- Gui.config
akka {
stdout-loglevel = INFO
loglevel = INFO
ACTOR_SYSTEM ="ProductXY-ActorSystem"
actor {
serialize-messages = on
debug {
receive = on # log any received message
autoreceive = on # log automatically received messages, e.g. PoisonPill
lifecycle = on # log actor lifecycle changes
event-stream = on # log subscription changes for Akka.NET event stream
unhandled = on # log unhandled messages sent to actors
}
provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
serializers {
hyperion = "Akka.Serialization.HyperionSerializer, Akka.Serialization.Hyperion"
akka-pubsub = "Akka.Cluster.Tools.PublishSubscribe.Serialization.DistributedPubSubMessageSerializer, Akka.Cluster.Tools"
}
serialization-bindings {
"System.Object" = hyperion
"Akka.Cluster.Tools.PublishSubscribe.IDistributedPubSubMessage, Akka.Cluster.Tools" = akka-pubsub
"Akka.Cluster.Tools.PublishSubscribe.Internal.SendToOneSubscriber, Akka.Cluster.Tools" = akka-pubsub
}
serialization-identifiers {
"Akka.Cluster.Tools.PublishSubscribe.Serialization.DistributedPubSubMessageSerializer, Akka.Cluster.Tools" = 9
}
}
remote {
log-remote-lifecycle-events = off
dot-netty.tcp {
transport-class = "Akka.Remote.Transport.DotNetty.TcpTransport, Akka.Remote"
applied-adapters = []
transport-protocol = tcp
port = 0
hostname = "10.168.4.30" # <<-- IP to gui pc.
}
}
cluster {
roles = ["shared-cluster"]
seed-nodes = ["akka.tcp://"${akka.ACTOR_SYSTEM}"@10.190.191.20:4053"] # <<-- IP to backend pc.
}
}
Резюме: на серверном ПК: маяк и серверный продукт работают вместе очень хорошо. Но гуи-продукт на пк 2 не может подключиться к маяку на пк 1. На пк1 1 может пинговать пк2 и наоборот.
Дополнительный тест: маяк, бэкенд и Gui-продукт работают без проблем на одной машине. Ip установлен на 127.0.0.1.
Q: Что не так с моими конфигурационными файлами hocon?
Крис