背景資料的RabbitMQ EventBasicConsumer不工作
我(對電子郵件)在RabbitMQ的隊列,並希望建立一個消費它。該隊列被另一個.NET應用程序用於向客戶發送電子郵件。我希望電子郵件邏輯能夠放在.NET應用程序之外,並且還具有RabbitMQ提供的耐用性等優點。
發行
的.NET應用程序能夠發佈/電子郵件推到隊列中,但我有困難,構建客戶!這是我對消費者代碼:
// A console app that would be turned into a service via TopShelf
public void Start()
{
using (_connection = _connectionFactory.CreateConnection())
{
using (var model = _connection.CreateModel())
{
model.QueueDeclare(_queueName, true, false, false, null);
model.BasicQos(0, 1, false);
var consumer = new EventingBasicConsumer(model);
consumer.Received += (channelModel, ea) =>
{
var message = (Email) ea.Body.DeSerialize(typeof(Email));
Console.WriteLine("----- Email Processed {0} : {1}", message.To, message.Subject);
model.BasicAck(ea.DeliveryTag, false);
};
var consumerTag = model.BasicConsume(_queueName, false, consumer);
}
}
}
上面的代碼應該能夠抓住關閉消息隊列並處理它們(根據本official guide),但這沒有發生。
許多事情都可能出錯。你如何發佈消息(交換)?同樣在你當前的代碼中 - 在你創建你的客戶之後(在'BasicConsume'後面),連接會立即關閉,所以你將無法得到任何消息。開始使用後不要立即處理您的連接。 – Evk
@Evk發佈者和消費者都是針對相同的交易所和隊列,我確信這一點。但我認爲你對連接處理是正確的,我會解決這個問題,並且看看它是否能夠做到。 – Ciwan
@Evk你是對的,處理連接是問題,請回復,我會標記爲答案:) – Ciwan