如何强制 MassTransit 更新现有 AWS SQS 队列的队列设置?
How to force MassTransit to update queue settings for exisitng AWS SQS queues?
我正在尝试使用新设置更新我们现有的消费者 SQS 队列。在这种情况下,我们需要将所有队列 TTL 更改为最长 14 天(对于正常队列、错误队列和 DLQ 队列)。
经过大量搜索后,我发现了一个似乎可以做到这一点的代码:
cfg.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
cfg.SendTopology.ConfigureErrorSettings = settings => settings.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
cfg.SendTopology.ConfigureDeadLetterSettings = settings => settings.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
然而,当针对现有队列构建时,它似乎没有更新设置。
这是我的完整 MassTransit 设置:
services.AddMassTransit(x =>
{
x.AddAmazonSqsMessageScheduler();
x.AddConsumers(assembliesWithConsumers.ToArray());
x.UsingAmazonSqs((context, cfg) =>
{
cfg.UseAmazonSqsMessageScheduler();
cfg.Host("aws", h =>
{
if (!String.IsNullOrWhiteSpace(mtSettings.AccessKey))
{
h.AccessKey(mtSettings.AccessKey);
}
if (!String.IsNullOrWhiteSpace(mtSettings.SecretKey))
{
h.SecretKey(mtSettings.SecretKey);
}
h.Scope($"{mtSettings.Prefix}-{mtSettings.Environment}", true);
var sqsConfig = !String.IsNullOrWhiteSpace(mtSettings.SqsServiceUrl)
? new AmazonSQSConfig() { ServiceURL = mtSettings.SqsServiceUrl }
: new AmazonSQSConfig()
{ RegionEndpoint = RegionEndpoint.GetBySystemName(mtSettings.Region) };
h.Config(sqsConfig);
var snsConfig = !String.IsNullOrWhiteSpace(mtSettings.SnsServiceUrl)
? new AmazonSimpleNotificationServiceConfig()
{ ServiceURL = mtSettings.SnsServiceUrl }
: new AmazonSimpleNotificationServiceConfig()
{ RegionEndpoint = RegionEndpoint.GetBySystemName(mtSettings.Region) };
h.Config(snsConfig);
});
cfg.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
cfg.SendTopology.ConfigureErrorSettings = settings => settings.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
cfg.SendTopology.ConfigureDeadLetterSettings = settings => settings.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
cfg.ConfigureEndpoints(context, new BusEnvironmentNameFormatter(mtSettings.Environment));
});
});
有谁知道如何使用 MassTransit 强制更新 SQS 队列设置?
MassTransit 不会更新现有队列或主题的设置。应用设置的唯一方法是删除队列或主题,之后 MassTransit 将使用配置的设置重新创建它。
我正在尝试使用新设置更新我们现有的消费者 SQS 队列。在这种情况下,我们需要将所有队列 TTL 更改为最长 14 天(对于正常队列、错误队列和 DLQ 队列)。
经过大量搜索后,我发现了一个似乎可以做到这一点的代码:
cfg.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
cfg.SendTopology.ConfigureErrorSettings = settings => settings.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
cfg.SendTopology.ConfigureDeadLetterSettings = settings => settings.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
然而,当针对现有队列构建时,它似乎没有更新设置。
这是我的完整 MassTransit 设置:
services.AddMassTransit(x =>
{
x.AddAmazonSqsMessageScheduler();
x.AddConsumers(assembliesWithConsumers.ToArray());
x.UsingAmazonSqs((context, cfg) =>
{
cfg.UseAmazonSqsMessageScheduler();
cfg.Host("aws", h =>
{
if (!String.IsNullOrWhiteSpace(mtSettings.AccessKey))
{
h.AccessKey(mtSettings.AccessKey);
}
if (!String.IsNullOrWhiteSpace(mtSettings.SecretKey))
{
h.SecretKey(mtSettings.SecretKey);
}
h.Scope($"{mtSettings.Prefix}-{mtSettings.Environment}", true);
var sqsConfig = !String.IsNullOrWhiteSpace(mtSettings.SqsServiceUrl)
? new AmazonSQSConfig() { ServiceURL = mtSettings.SqsServiceUrl }
: new AmazonSQSConfig()
{ RegionEndpoint = RegionEndpoint.GetBySystemName(mtSettings.Region) };
h.Config(sqsConfig);
var snsConfig = !String.IsNullOrWhiteSpace(mtSettings.SnsServiceUrl)
? new AmazonSimpleNotificationServiceConfig()
{ ServiceURL = mtSettings.SnsServiceUrl }
: new AmazonSimpleNotificationServiceConfig()
{ RegionEndpoint = RegionEndpoint.GetBySystemName(mtSettings.Region) };
h.Config(snsConfig);
});
cfg.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
cfg.SendTopology.ConfigureErrorSettings = settings => settings.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
cfg.SendTopology.ConfigureDeadLetterSettings = settings => settings.QueueAttributes.Add(QueueAttributeName.MessageRetentionPeriod, 1209600);
cfg.ConfigureEndpoints(context, new BusEnvironmentNameFormatter(mtSettings.Environment));
});
});
有谁知道如何使用 MassTransit 强制更新 SQS 队列设置?
MassTransit 不会更新现有队列或主题的设置。应用设置的唯一方法是删除队列或主题,之后 MassTransit 将使用配置的设置重新创建它。