テスト Orleans アプリケーションのメンバーシップ プロバイダーとして、既存の Consul クラスターを使用しようとしています。
クライアント アプリを Silo に接続すると、このエラーが発生します
Orleans.Runtime.Host.ConsulBasedMembershipTable にゲートウェイが見つかりませんでした。Orleans クライアントを初期化できません。
ConsulUtils クラスを掘り下げると、取得されるエントリには ProxyPort が定義されておらず、破棄されるため、空の結果セットになります。
次のようにサイロを初期化します。
var clusterConfiguration = new ClusterConfiguration();
clusterConfiguration.Globals.DataConnectionString = "http://localhost:8500";
clusterConfiguration.Globals.DeploymentId = "OrleansPlayground";
clusterConfiguration.Globals.LivenessType = GlobalConfiguration.LivenessProviderType.Custom;
clusterConfiguration.Globals.MembershipTableAssembly = "OrleansConsulUtils";
clusterConfiguration.Globals.ReminderServiceType = GlobalConfiguration.ReminderServiceProviderType.Disabled;
var silohost = new SiloHost("Fred", clusterConfiguration);
silohost.InitializeOrleansSilo();
startup = Task.Factory.StartNew(() =>
{
return silohost.StartOrleansSilo();
});
return true;
そして、クライアント アプリを次のように設定します。
var config = new ClientConfiguration();
config.CustomGatewayProviderAssemblyName = "OrleansConsulUtils";
config.DataConnectionString = "http://localhost:8500";
config.DeploymentId = "OrleansPlayground";
config.GatewayProvider = ClientConfiguration.GatewayProviderType.Custom;
GrainClient.Initialize(config);
ConsulUtils のコードを見ると、エントリの保存時に ProxyPort が設定されていない (つまり 0 である) ことがわかります。したがって、サイロを初期化するときに問題があると想定していますが、それが何であるかわかりません!