2017-09-12 10 views
1

要求/応答シナリオで_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 ... See here

答えて

1

これはデフォルトミドルウェアなので、この時点ではオフにする方法はありません。ただし、JObjectの空のコンシューマを作成すると、すべてのメッセージが消費されます。これは、受け取るメッセージに関係なく、少なくとも1つのコンシューマが存在することを意味します。その後、デッドレターキューのミドルウェアは使用されません。

+0

JObject Consumerに関する質問。私が持っている消費者に干渉することができますか?これらの消費者の優先順位は何ですか?私は消費者が特定のメッセージクラス/インターフェースを聞いている。 JObject Consumerが私のカスタムメッセージを消費する可能性はありますか? – Ozkan

+0

これはすべてのメッセージを消費しますが、特定のメッセージタイプ(多態性ディスパッチを使用する場合はタイプ階層)に複数のコンシューマがある場合、それらはすべてコピーを取得する必要があります。 –

関連する問題