2017-08-10 6 views
1
premier message

Je suis en train de mettre en œuvre modèle de demande de réponse RabbitMQ.RabbitMQ modèle Demande-réponse - consommateur cesse d'écouter la queue après traitement

Mon objectif est qu'il y aurait toujours un consommateur qui écoute une file d'attente et les réponses aux messages.

J'ai donc mis le serveur par:

var consumer = new EventingBasicConsumer(channel); 

channel.BasicConsume(queue: 'listensToThisQueue', 
    noAck: true, 
    consumer: consumer); 

consumer.Received += (model, ea) => 
{ 
    // Replying to client 
    channel.BasicPublish(exchange: '', 
      routingKey: routingKey, 
      basicProperties: props, 
      body: message); 
    // Basic ack 
    channel.BasicAck(deliveryTag: incomingDeliveryTag, 
      multiple: false); 
} 

Tout fonctionne vraiment bien:

  1. client envoie premier message
  2. serveur recevoir et répondre
  3. client reçoit le message

Le seul problème est que, après finshing méthode Received (Après l'exécution BasicAck) - Consommateur cesse écouter listenToQueue (je vois en fait 0 les consommateurs sur cette file d'attente dans la gestion de l'interface utilisateur).

Pourquoi est-ce?

Répondre

0

Cela se produit car vous vous abonnez à la file d'attente avec noAck défini sur True. Dans ce cas, le consommateur s'est écrasé après la livraison du premier message (c'est pourquoi vous voyez 0 consommateur). Vous devez donc vous abonner à la file d'attente avec noAck défini sur False.

+0

Donc en fait je peux éliminer « BasicAck » et il travaillerais – ohadinho