要求/応答シナリオで_skippedキューを作成しないように選択できますか?デッドレターメッセージがあるときにスキップされたキューを作成しない
私たちはこのようなアプリを構築することを選択しました(理由は分かりません)。私たちは複数の消費者に対してPublishRequestを実行しており、1人の消費者だけが応答しています。他のすべてはスキップされたキューを生成します(タイムアウトエラー)。私はこの構造を変えたくありません。しかし、RabbitMQでスキップされたキューの作成を無効にできれば、それは完璧です。
BusControl = Bus.Factory.CreateUsingRabbitMq(busFactoryConfig =>
{
busFactoryConfig.Host(new Uri(ServerUrl), hostConfig =>
{
hostConfig.Username(Username);
hostConfig.Password(Password);
});
busFactoryConfig.AutoDelete = true;
busFactoryConfig.Durable = true;
});
リクエスト方法:応答のための
var requestClient = BusControl.CreatePublishRequestClient<TRequest, TResponse>(TimeSpan.FromMilliseconds(5000));
TResponse response = TaskUtil.Await(() => requestClient.Request(request));
BusControl
:消費者で
BusControl = Bus.Factory.CreateUsingRabbitMq(busFactoryConfig =>
{
IRabbitMqHost rabbitMqHost = busFactoryConfig.Host(new Uri(ServerUrl), hostConfig =>
{
hostConfig.Username(Username);
hostConfig.Password(Password);
});
busFactoryConfig.ReceiveEndpoint(rabbitMqHost, receiveEndpointConfig =>
{
if (RetryLimit > 0)
receiveEndpointConfig.UseRetry(Retry.Incremental(3, 5000, 5000));
receiveEndpointConfig.Consumer<TConsumer>();
receiveEndpointConfig.PurgeOnStartup = false;
receiveEndpointConfig.AutoDelete = true;
receiveEndpointConfig.Durable = true;
});
});
応答し方法:
リクエストの
私が死んで文字メッセージやスキップされたキューを生成します消費者をタイムアウトしたい場合は、私はこれを返す:
return Task.CompletedTask;
しかし、私はで見ることがスキップされたキューをしたくありませんRabbitMQのGUIは、それ以外にはうまくいきません。
私はまた、数か月前にクリス・パターソンに同じ質問をしましたが、回答が得られませんでした:https://stackoverflow.com/a/39236139。
私はちょうど1つのスキップされたキューを作成する場合、アプリケーションが非常に多くのスキップされたキューを作成することを望んでいませんが、私はまだそれと一緒に暮らすことができますが、queuename ...
JObject Consumerに関する質問。私が持っている消費者に干渉することができますか?これらの消費者の優先順位は何ですか?私は消費者が特定のメッセージクラス/インターフェースを聞いている。 JObject Consumerが私のカスタムメッセージを消費する可能性はありますか? – Ozkan
これはすべてのメッセージを消費しますが、特定のメッセージタイプ(多態性ディスパッチを使用する場合はタイプ階層)に複数のコンシューマがある場合、それらはすべてコピーを取得する必要があります。 –