2016-01-05 27 views
7

私のウサギのキューには、現在キュー内の最初のメッセージに反応する問題があります。プッシュされている他のメッセージが無視された後です。RabbitMQはキューの最初のメッセージだけを受信します

私は接続をインスタンス化し、私のIQueueConnectionProviderにキューを宣言すると起動します。

public void ListenToQueue(string queue) 
{ 
    var channel = _queueConnectionProvider.GetQueue(); 

    var consumer = new EventingBasicConsumer(channel); 
    consumer.Received += (model, ea) => 
    { 
     string path = @"d:\debug.log.txt"; 
     File.AppendAllLines(path, new List<string>() {"MESSAGE RECEIVED", Environment.NewLine }); 

     var body = ea.Body; 
     var message = Encoding.UTF8.GetString(body); 

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

    channel.BasicConsume(queue, true, consumer); 

} 

マイログ:IQueueConnectionProviderはその後、一つだけの方法で依存関係として私のIQueueListenerに使用されている

var connectionFactory = new ConnectionFactory() { HostName = hostName }; 
var connection = _connectionFactory.CreateConnection(); 
var channel = connection.CreateModel(); 

ファイルは "MESSAGE RECEIVED"のように1行しか表示されませんが、Rabbit UIで他のサービスがそのキューにメッセージをプッシュしていることがわかります。

ここに何か不足していますか?

答えて

3

これは間違ったミスだった...もう一度。

channel.BasicConsume(queue, false, consumer); 

これは私が必要としていたものです。手動でメッセージを確認したいので、noAckfalseにする必要があります。

0

コードは正常に機能します。私のキューでテストし、ログファイルに "MESSAGE RECEIVED"を9回取得できました。私のキューには9つのメッセージがあるからです。

このコード行なしで試してみましたが、うまくいきました。 var channel = _queueConnectionProvider.GetQueue();

関連する問題