背景INFORabbitMQのEventBasicConsumer
働いていない私は、RabbitMQの中(電子メール用)のキューを持って、そしてそれのために消費者を構築したいです。このキューは、顧客に電子メールを送信するために別の.NETアプリケーションによって使用されます。電子メールロジックを.NETアプリケーションの外に置いて、耐久性... RabbitMQが提供するメリットがあることを望みました。
ISSUE
.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