RabbitMQ.EventBus.AspNetCore
RabbitMQ.EventBus.AspNetCore copied to clipboard
死信对列在哪实现的
Configuration.MessageTTL,没看到有哪个地方用到这个
5.0的版本前实现过在这里
https://github.com/ojdev/RabbitMQ.EventBus.AspNetCore/blob/7fd1f37e5d615e12a8b4be743a04d8d0bee5dcd8/src/RabbitMQ.EventBus.AspNetCore/DefaultRabbitMQEventBus.cs#L85C27-L85C27
升级6.0后这部分业务中没使用,就没继续实现,然后就离职了,就没再维护
#region snippet
var arguments = new Dictionary<string, object>();
#region 死信队列设置
if (_persistentConnection.Configuration.DeadLetterExchange.Enabled)
{
string deadExchangeName = $"{_persistentConnection.Configuration.DeadLetterExchange.ExchangeNamePrefix}{_persistentConnection.Configuration.DeadLetterExchange.CustomizeExchangeName ?? attr.Exchange}{_persistentConnection.Configuration.DeadLetterExchange.ExchangeNameSuffix}";
string deadQueueName = $"{_persistentConnection.Configuration.DeadLetterExchange.ExchangeNamePrefix}{queue}{_persistentConnection.Configuration.DeadLetterExchange.ExchangeNameSuffix}";
IModel dlxChannel;
try
{
dlxChannel = _persistentConnection.ExchangeDeclare(exchange: deadExchangeName, type: type);
dlxChannel.QueueDeclarePassive(deadQueueName);
}
catch
{
dlxChannel = _persistentConnection.ExchangeDeclare(exchange: deadExchangeName, type: type);
dlxChannel.QueueDeclare(queue: deadQueueName,
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
}
dlxChannel.QueueBind(deadQueueName, deadExchangeName, attr.RoutingKey, null);
arguments.Add("x-dead-letter-exchange", deadExchangeName);
}
#endregion
try
{
channel = _persistentConnection.ExchangeDeclare(exchange: attr.Exchange, type: type);
channel.QueueDeclarePassive(queue);
}
catch
{
channel = _persistentConnection.ExchangeDeclare(exchange: attr.Exchange, type: type);
if (_persistentConnection.Configuration.MessageTTL != null && _persistentConnection.Configuration.MessageTTL > 0)
{
arguments.Add("x-message-ttl", _persistentConnection.Configuration.MessageTTL);
}
channel.QueueDeclare(queue: queue,
durable: true,
exclusive: false,
autoDelete: false,
arguments: arguments);
}
#endregion
死信队列就是一个消息队列,只是用参数声明死信交换机arguments.Add("x-dead-letter-exchange", deadExchangeName);,和队列的存活时间 arguments.Add("x-message-ttl", _persistentConnection.Configuration.MessageTTL);,就可以成为死信队列了。