私はRabbitMqを.NETで学んでいます。 tutorialによると、消費者の最も簡単な実装は次のようになります。C# RabbitMq:メソッドリファクタリングが機能を停止しますか?
public class Receive
{
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using(var connection = factory.CreateConnection())
using(var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
};
channel.BasicConsume(queue: "hello",
noAck: true,
consumer: consumer);
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
}
}
そして、それは正常に動作します。しかし、私はそれをリファクタリングしたい:別の方法で受信機の機能を定義してみましょう。 )
public class Recieve
{
private ConnectionFactory factory;
public void ConsumeSimpleMessage(string queueName = "default")
{
using(var connection = factory.CreateConnection())
{
using(var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: queueName, durable: false,
exclusive: false, autoDelete: false, arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(message);
};
channel.BasicConsume(queue: queueName,
noAck: true,
consumer: consumer);
}
}
}
public Recieve(string hostName = "localhost")
{
factory = new ConnectionFactory() { HostName = hostName };
}
}
そして、私はメイン(にこのメソッドを呼び出すしようとすると:それは次のようになります
class Program
{
static void Main(string[] args)
{
Recieve reciever = new Recieve();
reciever.ConsumeSimpleMessage();
Console.ReadLine();
}
}
ここでは動作しません。それは何も表示されません。ただし、メッセージは削除され、受信されたことを意味します。それはなぜ起こるのですか?私はイベントハンドリングについて知らなかったことはありますか?
デッドレター/エラーキューを確認し、その中に何かがあるかどうか確認できますか? – MindingData
あなたのキュー名はこんにちは? – Joe