HINTERGRUND INFORabbitMQ EventBasicConsumer nicht
Arbeit habe ich eine Warteschlange (für E-Mails) in RabbitMQ, und will für sie einen Verbraucher aufzubauen. Die Warteschlange wird von einer anderen .NET-App zum Senden von E-Mails an Kunden verwendet. Ich wollte, dass die E-Mail-Logik außerhalb der .NET-App sitzt, und auch die Vorteile der Haltbarkeit ... etc, die RabbitMQ bietet.
AUSGABE
Die NET-Anwendung ist in der Lage zu veröffentlichen/Push-E-Mails in die Warteschlange, aber ich habe Schwierigkeiten den Aufbau der Verbraucher! Hier ist mein Code für den Verbraucher:
// 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);
}
}
}
Der obige Code sollte in der Lage sein, Nachrichten aus der Warteschlange zu greifen und verarbeiten sie (nach dieser official guide), aber dies ist nicht der Fall.
Viele Dinge können schief gehen. Wie publizierst du Nachrichten (an welchen Austausch)? Auch in Ihrem aktuellen Code - Verbindung wird sofort geschlossen, nachdem Sie Ihren Consumer erstellen (nach 'BasicConsume'), so dass Sie sowieso keine Nachrichten erhalten können. Entsorgen Sie Ihre Verbindung nicht direkt nach dem Beginn des Verbrauchs. – Evk
@Evk sowohl der Publisher als auch der Verbraucher zielen auf denselben Austausch und dieselbe Warteschlange ab, davon bin ich sicher. Aber ich denke, Sie haben Recht mit der Verbindungsentsorgung, ich werde das beheben und sehen, ob das irgendetwas bewirkt. – Ciwan
@Evk Sie hatten Recht, die Beseitigung der Verbindung war das Problem, bitte antworten Sie und ich werde als Antwort markieren :) – Ciwan