【发布时间】:2021-08-30 15:50:56
【问题描述】:
我有一个 Rabbitmq channels 池,还有一些 queues 和 consumers。
这样我可以得到一个频道:
var channel = concurrentChannelPool.Get();
每当我的工作完成与 channel 时,我都会打电话给 concurrentChannelPool.Return(channel);
由于我之前定义的某些原因,concurrentChannelPool 可能会在频道上调用dispose。
现在我的问题是,我可以返回用于注册消费者的渠道吗?
当我们注册一个消费者然后删除用于该消费者的渠道时会发生什么。该消费者是否收到消息?
这是我注册消费者的方式:
var consumer = new AsyncEventingBasicConsumer(channel);
consumer.Received += async (ch, ea) =>
{
var body = ea.Body;
// ... process the message
var bodyString = Encoding.UTF8.GetString(body, 0, body.Length);
await eventHandler(ea.BasicProperties, bodyString);
if (!autoAck)
{
channel.BasicAck(ea.DeliveryTag, false);
}
};
String consumerTag = channel.BasicConsume(queueName, autoAck, consumer);
我在我的 dotnet 核心应用程序上将此池用作服务,因此我需要一个通道池。
【问题讨论】:
标签: c# asp.net-core rabbitmq