2017-08-10 75 views
1

我試圖實現RabbitMQ請求響應模式。RabbitMQ請求 - 響應模式 - 消費者在處理第一條消息後停止監聽隊列

我的目標是總是有一個消費者傾聽隊列並回復消息。

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

實際上一切工作正常:

所以我已經設置的服務器最多

  1. 客戶端發送第一條消息
  2. 服務器接收和回覆
  3. 客戶端獲取信息

唯一的問題是,在FIN FINING Received方法(執行BasicAck後) - 消費者停止收聽listenToQueue(實際上,在UI管理中,我在該隊列中看到0個消費者)。

這是爲什麼?

回答

0

發生這種情況是因爲您正在訂閱noAck設置爲True的隊列。在這種情況下,消費者在第一封郵件發送後崩潰了(這就是爲什麼你看到0個消費者)。所以你必須訂閱隊列noAck設置爲False

+0

所以實際上我可以消除「BasicAck」,它會工作 – ohadinho

相關問題