【问题标题】:How to properly configure SQS without using SNS topics in MassTransit?如何在 MassTransit 中不使用 SNS 主题的情况下正确配置 SQS?
【发布时间】: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


    【解决方案1】:

    Publish 需要使用主题,在 SQS 的情况下使用 SNS。

    如果您想自己配置端点并阻止使用主题,您需要:

    1. 设置ConfigureConsumeTopology = false - 这可以防止创建主题并将其连接到接收端点队列。
    2. 设置PublishFaults = false - 这可以防止在消费者抛出异常时创建错误主题。
    3. 不要打电话给Publish,因为,显然会创建一个话题。

    如果您想以某种方式为您的接收端点名称建立一个与您发送消息的能力相一致的约定,您可以创建自己的端点名称格式化程序,该格式化程序将使用消息类型,然后使用相同的要调用 GetSendEndpoint 的名称,使用 queue:name 短名称语法将消息发送直接到这些队列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      相关资源
      最近更新 更多