【问题标题】:MassTransit & Amazon SQS - EventType being created as a queueMassTransit 和 Amazon SQS - EventType 被创建为队列
【发布时间】:2020-05-14 10:53:56
【问题描述】:

我刚刚从 RabbitMq 迁移到 Amazon SQS。

我不希望发生的一件事是,当我使用 docker 和 IHostedService 启动时,消息类型被创建为队列:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMassTransit(x =>
        {
            x.AddConsumer<EmailSentConsumer>();

            x.AddBus(provider => Bus.Factory.CreateUsingAmazonSqs(cfg =>
            {
                cfg.Host("eu-west-2", h =>
                {
                    h.AccessKey("********");
                    h.SecretKey("********");
                });

                cfg.ReceiveEndpoint("logging_example_queue", e =>
                {
                    //e.ConfigureConsumer<EmailSentConsumer>(provider);
                    //e.ConfigureConsumer<EmailReceivedConsumer>(provider);
                });

                cfg.ConfigureEndpoints(provider);
            }));
        });

        services.AddSingleton<IHostedService, BusService>();

        services.AddMassTransitHostedService();
    }

public class EmailSentConsumer : IConsumer<EmailSent>

EmailSent 被设置为队列,当我只想让此服务在 logging_example_queue 中侦听该事件类型时。

当我通过一个简单的控制台应用程序进行设置,并将消费者放在配置端点中时

            cfg.ReceiveEndpoint("logging_queue", e =>
            {
                e.Consumer<ConsumerTo>();
                e.Consumer<AnotherConsumer>();
            });

这很好用,有什么建议吗?

编辑

所以,我尝试了 Chris 的回答,但这并没有按照建议创建队列,但我确实需要该主题。我想以此为例:

主题电子邮件已发送: 队列:记录 队列:EmailListener

以下是来自 AWS 的屏幕截图:

【问题讨论】:

    标签: .net-core amazon-sqs masstransit


    【解决方案1】:

    EmailSent 应该在 SNS 中创建为主题,而不是队列。

    如果您不想创建主题,请添加:

    ConfigureConsumeTopology = false;
    

    到接收端点配置。另外,不要调用Publish,因为这也会创建主题。

    【讨论】:

    • 感谢您的回复。它确实创建了主题,但它肯定也创建了一个队列,现在用屏幕截图更新我的问题。
    【解决方案2】:
                cfg.ReceiveEndpoint("logging_example_queue", e =>
                {
                    //e.ConfigureConsumer<EmailSentConsumer>(provider);
                    //e.ConfigureConsumer<EmailReceivedConsumer>(provider);
                });
    
                cfg.ConfigureEndpoints(provider);
    

    这是问题,通过更改 configureendpoints 解决了这个问题,如下所示:

                    cfg.ReceiveEndpoint("logging_example_queue", e =>
                    {
                        e.ConfigureConsumers(provider);
                    });
    

    【讨论】:

      猜你喜欢
      • 2017-05-09
      • 2017-04-12
      • 2016-01-18
      • 2019-04-11
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      相关资源
      最近更新 更多