MassTransit.AmazonSQS。是否可以在总线启动后,将receiveendpoint中已经存在的SQS队列订阅到一个SNS主题?

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

我正在运行一个带有AmazonSQS的MassTransit配置。在我的程序中,我首先创建了一个带有队列 "input-queue1 "的receiveenpoint,我将这个SQS队列订阅到一个名为 "topic1 "的SNS主题上,并将一个消费者关联到这个receiveendpoint上,这个消费者会对收到的消息进行一些标准打印。在启动总线后,我想把已经创建的队列 "input-queue1 "订阅到另一个名为 "topic2 "的SNS主题上,但我找不到在启动总线后这样做的方法(对我来说,在总线启动后可以这样做很重要)。有什么方法可以做到这一点,是我遗漏了什么,还是根本不可能?(我试过用代码的注释部分,但没有成功)

class Program
    {
        static async Task Main(string[] args)
        {
            var bus = Bus.Factory.CreateUsingAmazonSqs(x =>
            {
                x.Host(Constants.Region, h =>
                {
                    h.AccessKey(Constants.AccesskeyId);
                    h.SecretKey(Constants.SecretAccessKey);
                });

                x.ReceiveEndpoint("input-queue1", e =>
                {
                    e.Subscribe("topic1", callback => { });

                    e.Consumer(() => new Handler());
                });

            });

            bus.StartAsync().Wait();

            /*var handle = bus.ConnectReceiveEndpoint("input-queue1", e => {
                e.Subscribe("topic2", callback => { });
            });
            var ready = await handle.Ready;*/

            Console.WriteLine("Listening to messages...");
            Console.WriteLine("Press enter to quit");
            Console.ReadLine();
        }
    }
masstransit
1个回答
0
投票

一旦创建了receive endpoint,你就不能改变它的拓扑结构。这意味着不能创建新的主题订阅,也不能删除现有的订阅。

如果你需要改变接收端点的配置,你需要自己通过使用SNS API自己添加订阅。我会质疑 何以 不过你会想这样做。如果消费者无法消费转发到队列中的消息,它将被移到跳过的队列中。

© www.soinside.com 2019 - 2024. All rights reserved.