【问题标题】:Using MassTransit to connect to existing AWS SNS/SQS使用 MassTransit 连接到现有的 AWS SNS/SQS
【发布时间】:2021-05-14 05:53:30
【问题描述】:

我们已经设置并运行了 SNS/SQS,但我们希望开始从 AWSSDK.* 转向 MassTransit。

我已经使用 InMemory 和 RabbitMq(通过 docker)成功地使用了 MassTransit。但是,我无法让 MassTransit 与 AWS 合作。我尝试的所有操作都会导致启动错误,例如“端点故障”

我能找到的所有示例似乎都允许 MassTransit 根据其自己的命名约定实例化任何必要的队列/主题,或者不显示完整的配置。我找不到解释使用什么值的示例。

假设我从 AWS 管理控制台获取了以下字符串。

SNS
Name: "SNS"
DisplayName: "SNS.DisplayName"
ARN: "SNS.ARN" <- this is what I give to AWSSDK.SimpleNotificationService

SNS -> Subscription
ARN: "SNS.Sub.ARN"
Endpoint: "SNS.Sub.Endpoint
Topic: "SNS.Sub.Topic"

SQS
Name: "SQS"
ARN: "SQS.ARN"
URL: "SQS.Url"

假设我有这样的配置:

.AddMassTransit(x =>
{
    x.AddConsumer<MyConsumer>();

    x.UsingAmazonSqs((context, cfg) =>
    {
        cfg.Host("us-west-2", h =>
        {
            h.AccessKey("access");
            h.SecretKey("secret");
        });

        cfg.ReceiveEndpoint(">> What goes here? <<", e =>
        {
            e.UseMessageRetry(r => r
                .Interval(2, TimeSpan.FromMilliseconds(5000))
            );

            e.ConfigureConsumeTopology = false;
            e.Subscribe(">> What goes here? <<", s =>
            {
                s.TopicAttributes["DisplayName"] = ">> What goes here? <<";
                // Is this needed?
                // s.TopicSubscriptionAttributes["some-subscription-attribute"] = "some-attribute-value";
            });

            e.ConfigureConsumer<MyConsumer>(context);
        });
    });
})
.AddMassTransitHostedService()

为了能够发送/发布和使用消息,哪些值需要去往哪里? 我是否缺少任何配置步骤?

谢谢。

【问题讨论】:

    标签: masstransit


    【解决方案1】:

    MassTransit 将为您创建 SNS 主题、SQS 队列并配置 SNS->SQS 订阅。无需在管理控制台中配置它们,只需确保 IAM 凭证能够创建这些资源。如果它们已经存在,它们将不会被重新创建。

    .AddMassTransit(x =>
    {
        x.AddConsumer<MyConsumer>();
    
        x.UsingAmazonSqs((context, cfg) =>
        {
            cfg.Host("us-west-2", h =>
            {
                h.AccessKey("access");
                h.SecretKey("secret");
            });
    
            cfg.ReceiveEndpoint("SQS queue name", e =>
            {
                e.UseMessageRetry(r => r.Interval(2, TimeSpan.FromMilliseconds(5000)));
    
                e.ConfigureConsumeTopology = false;
                e.Subscribe("SNS topic name");
    
                e.ConfigureConsumer<MyConsumer>(context);
            });
        });
    })
    .AddMassTransitHostedService()
    

    【讨论】:

    • 无论我尝试什么,在连接到现有队列时,我都会在启动时收到“Endpoint Faulted: amazonsqs://us-west-2/*******”。有什么建议吗?
    • 您需要分享更多有关错误的详细信息才能有所帮助。
    • @ChrisPatterson,我遇到了使用自定义 sns 主题名称接收的问题。 x.ReceiveEndpoint("XYZ-开发-Chris-Patterson-q", e => { e.UseMessageRetry(r => r.Immediate(5)); e.Subscribe("XYZ-开发-Chris-Patterson-topic" , 回调 =>{}); e.Consumer(() => new Handler()); });但它试图使用上述消息类名称空间创建一个名称为名称的 sns 主题。 “arn:aws:sns:us-east-1:933023837066:PubSub_Messages-StringMessage”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2021-07-20
    • 2018-10-17
    • 2022-10-17
    相关资源
    最近更新 更多