CONTEXTE INFORabbitMQ EventBasicConsumer ne fonctionne pas
J'ai une file d'attente (des e-mails) à RabbitMQ, et que vous voulez construire un consommateur pour lui. La file d'attente est utilisée par une autre application .NET pour l'envoi de courriels aux clients. Je voulais que la logique de l'emailing soit installée en dehors de l'application .NET, et qu'elle ait aussi les avantages de la durabilité ... etc qu'offre RabbitMQ.
NUMÉRO
L'application .NET est en mesure de publier/push e-mails sur la file d'attente, mais je du mal à élaborer le consommateur! Voici mon code pour le consommateur:
// 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);
}
}
}
Le code ci-dessus doit être en mesure de saisir les messages de la file d'attente et de les traiter (selon ce official guide), mais cela ne se produit pas.
Beaucoup de choses peuvent mal tourner. Comment publiez-vous les messages (à quel échange)? Aussi dans votre code actuel - la connexion sera fermée immédiatement après la création de votre client (après 'BasicConsume') de sorte que vous ne serez pas en mesure d'obtenir des messages de toute façon. Ne jetez pas votre connexion juste après le début de la consommation. – Evk
@Evk à la fois l'éditeur et le consommateur visent le même échange et la file d'attente, j'en suis certain. Mais je pense que vous avez raison au sujet de l'élimination des connexions, je vais corriger cela, et voir si cela fait quoi que ce soit. – Ciwan
@Evk vous aviez raison, la disposition de la connexion était le problème, s'il vous plaît répondre et je vais marquer comme réponse :) – Ciwan