c# - 消费者“收到”事件未触发
问题描述
我正在尝试设置对 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
方法没有触发。
我在这里想念什么?
解决方案
“使用”调用处理您的连接,您的事件不会被触发。只需从代码中删除您的“使用”块,这样它就不会关闭连接。
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);
推荐阅读
- flutter - 使用 Flutter Flame 翻转精灵
- javascript - 新的 Date() 函数和 moment() 不会检测以数字开头和结尾的字符的输入,例如 'abc 12' 作为无效日期
- html - 如何在所有浏览器中根据其高度在 flexbox 中获取项目以缩小其宽度?
- kubernetes - 如何从节点获取变量值到 POD?
- visual-studio-code - 如何隐藏/禁用 VSCode LiveShare“开始讨论”
- sql - 在 Amzon Redshift 中提取部分字符串
- asp.net-mvc - 如何将 ASP.NET Web API 添加到默认服务器 ASP.NET Blazor 默认生成的解决方案
- python - 是否有任何包含 YOLO 眼睛类别的数据集?
- pytorch - 使用 PythonVirtualenvOperator 中的 pip 以外的其他源下载
- azure - 您可以在特定步骤启动 ElasticJob