나는 RabbitMq with .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