Akka.net cluster broadcast only received by one node

368 Views Asked by At

I learned from the Akka.net WebCrawler and created my own cluster test. I have a Processor node(Console App) and an API node(SignalR). Here are the configurations.

Processor node:

akka {
    actor{
        provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
        deployment {
            /dispatcher/signalR {
                router = broadcast-group
                routees.paths = ["/user/signalr"]
                cluster {
                    enabled = on
                    #max-nr-of-instances-per-node = 1
                    allow-local-routees = false
                    use-role = api
                }
            }
        }
    }
    remote {
        log-remote-lifecycle-events = DEBUG
        helios.tcp {
                port = 0
                hostname = 127.0.0.1
        }
    }
    cluster {
        seed-nodes = ["akka.tcp://[email protected]:4545"]
        roles = [processor]
    }
}

API node: (Non seed-node will have port = 0)

akka {
    actor{
        provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
    }
    remote {
        log-remote-lifecycle-events = DEBUG
        helios.tcp {
                port = 4545
                hostname = 127.0.0.1
        }
    }
    cluster {
        seed-nodes = ["akka.tcp://[email protected]:4545"]
        roles = [api]
    }
}

Inside of the API node, I created a normal actor called SignalR.

Inside of the processor node I created a normal actor and used the Scheduler to Tell() the API node's signalR actor some string.

This works great when I have one Processor and one API. It also works when I have multiple Processor nodes and a single API node. Unfortunately, when I have multiple API node, no matter how I setup the configuration, the "tell" won't tell all of the API nodes; the message only goes to one of them. Which node receives the message is based on the API node start sequence. It seems that I have the all API nodes registered in the cluster correctly, but I could be wrong.

I'm starting to feel that this is a configuration or understanding issue. Can anyone share any insights?

I did some additional testing. The behavior remains the same when I replace the ASP.NET SignalR API node with a normal console application.

UPDATE: I contacted Akka.NET team. This behavior is a known bug. It will be fixed in 1.1 release. UPDATE 2: The issue has been marked as fixed for the proejct on GitHub.

0

There are 0 best solutions below