【发布时间】:2021-01-19 15:24:56
【问题描述】:
我在使用 SQS 配置 MassTransit 时遇到一些问题。我的目标是让 N 个消费者创建 N 个队列,并且每个消费者都接受不同的消息类型。因为我总是有一个 1 对 1 的消费者到消息的映射,所以我对任何形式的扇出行为都不感兴趣。因此,发布 T 类型的消息应该直接将其发布到该队列。我将如何配置它?这是我目前所拥有的:
services.AddMassTransit(x =>
{
x.AddConsumers(Assembly.GetEntryAssembly());
x.UsingAmazonSqs((context, cfg) =>
{
cfg.Host("aws", h =>
{
h.AccessKey(mtSettings.AccessKey);
h.SecretKey(mtSettings.SecretKey);
h.Scope($"{mtSettings.Environment}", true);
var sqsConfig = new AmazonSQSConfig() { RegionEndpoint = RegionEndpoint.GetBySystemName(mtSettings.Region) };
h.Config(sqsConfig);
var snsConfig = new AmazonSimpleNotificationServiceConfig()
{ RegionEndpoint = RegionEndpoint.GetBySystemName(mtSettings.Region) };
h.Config(snsConfig);
});
cfg.ConfigureEndpoints(context, new BusEnvironmentNameFormatter(mtSettings.Environment));
});
});
BusEnvironmentNameFormatter 类覆盖KebabCaseEndpointNameFormatter 并添加环境作为前缀,效果是所有队列都以“dev”开头,而h.Scope($"{mtSettings.Environment}", true) 行对主题也是如此。
我尝试在不配置主题的情况下使其正常工作,但我无法在没有任何错误的情况下使其正常工作。我错过了什么?
SQS 文档有点薄,但实际上可以在不使用 sns 主题的情况下执行bus.Publish() 还是有必要?如果不可能,我将如何使用 bus.Send() 而不在呼叫中硬编码队列名称?
干杯!
【问题讨论】:
标签: amazon-sqs amazon-sns masstransit