MassTransit & Amazon SQS - EventType被创建为队列。

问题描述 投票:0回答:1

我刚刚从 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中的事件类型。

当我通过一个简单的控制台应用来设置这个,并且在configure endpoint内的Consumers

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

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

编辑

所以,我已经尝试了Chris的答案,这并没有像建议的那样创建队列,但我确实需要主题。我想以这个为例。

Topic EmailSent: Queue: LoggingQueue: EmailListener

下面是AWS的截图。

enter image description here

enter image description here

.net-core amazon-sqs masstransit
1个回答
0
投票

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

如果你不希望创建主题,请在接收端点配置中添加。

ConfigureConsumeTopology = false;

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


0
投票
            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);
                });
© www.soinside.com 2019 - 2024. All rights reserved.