我正在尝试建立对RabbitMQ队列的订阅,并将其传递给自定义事件处理程序。
因此,我有一个名为RabbitMQClient
的类,其中包含以下方法:
public void Subscribe(string queueName, EventHandler<BasicDeliverEventArgs> receivedHandler)
{
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 += receivedHandler;
channel.BasicConsume(
queue: queueName,
autoAck: false,
consumer: consumer
);
}
}
}
我正在使用依赖项注入,因此我有一个RabbitMQClient
(单例)接口。
在消费类中,我有想用作EventHandler
public void Consumer_Received(object sender, BasicDeliverEventArgs e)
{
var message = e.Body.FromByteArray<ProgressQueueMessage>();
}
我正在尝试订阅这样的队列:
rabbitMQClient.Subscribe(Consts.RabbitMQ.ProgressQueue, Consumer_Received);
我可以看到队列开始获取消息,但是Consumer_Received
方法没有触发。
我在这里想念什么?
答案 0 :(得分:2)
“正在使用”呼叫置于您的连接上,不会触发您的事件。只需从代码中删除“ using”块,以使它不会关闭连接。
var connection = factory.CreateConnection();
var channel = connection.CreateModel()
{
channel.QueueDeclare(
queue: queueName,
durable: false,
exclusive: false,
autoDelete: false,
arguments: null
);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += receivedHandler;
channel.BasicConsume(
queue: queueName,
autoAck: false,
consumer: consumer
);