2017-06-15 12 views
0

私は.NET Coreアプリケーション(キューへの公開は他のアプリケーションを経由します)でRabbitClientをキューリーダーシングルトンとして使用しています。そして私のアプリケーションが待ち行列からの読み込みをしばらくしてから問題に直面しています。メッセージのキューがいっぱいになるのを見ると、私はますますプッシュしますが、リーダーアプリは再起動するまで読んでいません。 RabbitClientのコードは次のとおりです。RabbitMQ EventingBasicConsumerはメッセージの受信を停止します

private readonly IConnection _connection; 

public RabbitClient(IMessagingConfiguration configuration) 
{ 
    IConnectionFactory connectionFactory = new ConnectionFactory { Uri = _configuration.ConnectionString }; 
    _connection = connectionFactory.CreateConnection(); 
} 

public void OnMessageAsync<T>(Func<T, Task> callback) where T : class 
{ 
    T result; 
    var queueName = _configuration.QueueName; 
    var channel = _connection.CreateModel(); 
    var consumer = new EventingBasicConsumer(channel); 

    consumer.Received += (model, args) => 
    { 
     var json = Encoding.UTF8.GetString(args.Body); 
     result = JsonConvert.DeserializeObject<T>(json); 
     callback(result).GetAwaiter().GetResult(); 

     channel.BasicAck(args.DeliveryTag, false); 
    }; 

    channel.BasicConsume(queue: queueName, noAck: false, consumer: consumer); 
} 

このようなストップなしで読書を続行するにはどうすればよいですか?

+0

、あなたの消費者の滞在は、RabbitMQのサーバに接続されていますか?これはRabbitMQ管理UIで確認できます –

+0

RabbitMQと.NETクライアントのどのバージョンを使用していますか?これについては、[GitHub issues](https://github.com/rabbitmq/rabbitmq-dotnet-client/pull/275)を検索しましたか? –

答えて

0

.Netはあまり考えていませんがスレッドブロッキングのように聞こえますが、自動というようにackモードを変更しようとすると、コンシューマコンシューマとプリフェッチ回数が増えてパフォーマンスが向上します。

管理ポータルから、消費者とコンシューマの利用率を監視して、リスナー側の状況を把握してください。あなたがメッセージの受信を停止する場合

enter image description here

関連する問題