我正在开发一个 ASP.NET Core 微服务应用程序,其中使用 Steeltoe 包来集成 RabbitMQ 进行消息传递。我正在尝试使用 Steeltoe 包提供的 MaxAttempts 属性来实现具有最大尝试次数的重试机制,但在实现所需的行为方面遇到了困难。这是我的 appsettings.json 配置的相关部分:
"Spring": {
"RabbitMq": {
"Addresses": "*",
"Template": {
"Retry": {
"Enabled": true,
"MaxAttempts": 3
}
}
}
}
这些是我正在使用的 Steeltoe 库:
using Steeltoe.Messaging.RabbitMQ.Attributes;
using Steeltoe.Messaging.RabbitMQ.Core;
我还在我的 Program.cs 中配置了 RabbitMQ 服务,如下所示:
builder.Services.AddRabbitServices(true);
builder.Services.AddRabbitAdmin();
builder.Services.AddRabbitTemplate();
在我的应用程序中,我有一个处理消息的 RabbitMQ 消息侦听器方法。我想使用 MaxAttempts 配置限制此侦听器的重试次数,但尽管在配置中将该值设置为 3,侦听器仍会无限期地重试。
这是我的消息侦听器方法的简化版本:
[RabbitListener(Constants.RECEIVE_AND_CONVERT_QUEUE)]
public void ListenForAMessage(ContentMessage msg)
{
// Message processing
// ...
}
对于如何使用 Steeltoe 包的配置正确限制监听器的重试次数,我将不胜感激。我的设置或代码中是否缺少某些内容,导致重试行为被限制为指定的尝试次数?
appsettings.json 中的配置正确。听起来 RabbitOptions 类可能没有配置。为此,您可以添加以下内容:
services.ConfigureRabbitOptions(config);
如果这没有帮助,你可以尝试做一个最小的项目,我可以看一下。