2016-01-05 8 views
7

Mam problem z kolejkami Rabbit, który reaguje obecnie tylko na pierwszą wiadomość w kolejce, po czym wszystkie inne wiadomości są ignorowane.RabbitMQ słucha tylko pierwszej wiadomości w kolejce

Zacznę uruchamianiu połączenia i deklarując kolejkę w moim IQueueConnectionProvider:

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

To IQueueConnectionProvider jest następnie wykorzystywany w moim IQueueListener jako zależność z tylko jedną metodę:

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); 

} 

Mój log plik kończy się jako jedna linia "OTRZYMANY KOMUNIKAT", jednak widzę w interfejsie Królik ui, że moje inne usługi przesyłają wiadomości do tej kolejki.

Czy jest tu coś, czego mi brakuje?

Odpowiedz

3

To był głupi błąd ... jeszcze raz.

channel.BasicConsume(queue, false, consumer); 

Tego właśnie potrzebowałem. Chcę ręcznie potwierdzić moje wiadomości, dlatego noAck musi być false;

0

Kod działa poprawnie! Przetestowałem z moją kolejką i udało mi się uzyskać 9 razy w pliku dziennika komunikat "OTRZYMANY WIADOMOŚĆ"; odkąd miałem 9 wiadomości w mojej kolejce.

Próbowałem bez tego wiersza kodu i działało dobrze var channel = _queueConnectionProvider.GetQueue();

Powiązane problemy