Ignite のロード バランサー (RoundRobinGlobalLoadBalancer など) は、N 個のクライアント ノードがあり、サーバー ノードが 1 つしかない場合、サーバー ノードのバウンスを処理しません。唯一のサーバー ノードの EVT_NODE_FAILED、EVT_NODE_JOINED、EVT_NODE_LEFT イベントをポスト/処理する他のサーバー ノードがないため、問題が存在します。したがって、以下のコード スニペットに示すように、一部のクライアント ノードがリモート プロキシを使用している場合
public <T> T locate(String serviceName, Class<T> serviceClass) {
return ignite.services().serviceProxy(serviceName, serviceClass, false);
}
サーバー ノードがバウンスされた後、プロキシを使用しようとすると失敗します。つまり、IgniteException "Task topology does not have alive nodes" です。
上記のトポロジ (サーバー ノードが 1 つ) でこの問題を解決するには、IgniteConfiguration でカスタムの「loadBalancingSpi」を指定する必要があります。これは RoundRobinGlobalLoadBalancer の固定バージョンを使用しています。固定バランサーのコードでは、クライアント ノードに送信される EVT_CLIENT_NODE_RECONNECTED にもサブスクライブしています。このようにして、ノードのスナップショットが、バウンスされているサーバー ノードの UUID で更新されるようにします。
これを解決する簡単な方法があるかどうか誰かが知っていますか?