4

Akka.net WebCrawlerから学び、独自のクラスター テストを作成しました。プロセッサ ノード (コンソール アプリ) と API ノード (SignalR) があります。構成は次のとおりです。

プロセッサ ノード:

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://stopfinder@127.0.0.1:4545"]
        roles = [processor]
    }
}

API ノード: (非シード ノードはポート = 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://stopfinder@127.0.0.1:4545"]
        roles = [api]
    }
}

API ノード内に、SignalR という通常のアクターを作成しました。

プロセッサ ノード内で通常のアクターを作成し、Scheduler を使用しTell()て API ノードの signalR アクターに文字列を渡しました。

これは、1 つのプロセッサと 1 つの API がある場合にうまく機能します。複数のプロセッサ ノードと 1 つの API ノードがある場合にも機能します。残念ながら、複数の API ノードがある場合、どのように構成をセットアップしても、"tell" ですべての API ノードが通知されるわけではありません。メッセージはそのうちの 1 つにのみ送信されます。どのノードがメッセージを受信するかは、API ノードの開始シーケンスに基づきます。すべての API ノードがクラスターに正しく登録されているようですが、間違っている可能性があります。

これは構成または理解の問題だと感じ始めています。誰でも洞察を共有できますか?

追加のテストを行いました。ASP.NET SignalR API ノードを通常のコンソール アプリケーションに置き換えても、動作は変わりません。

更新: Akka.NET チームに連絡しました。この動作は既知のバグです。1.1 リリースで修正される予定です。 更新 2: この問題は、GitHub のプロジェクトで修正済みとしてマークされています。

4

0 に答える 0