我正在运行一个带有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();
}
}
一旦创建了receive endpoint,你就不能改变它的拓扑结构。这意味着不能创建新的主题订阅,也不能删除现有的订阅。
如果你需要改变接收端点的配置,你需要自己通过使用SNS API自己添加订阅。我会质疑 何以 不过你会想这样做。如果消费者无法消费转发到队列中的消息,它将被移到跳过的队列中。