如何在 Masstransit 中获取所有已配置的接收端点

How to get all configured receive endpoints in Masstransit

我在运行时使用以下代码连接接收端点,但如果已经添加了具有相同密钥的接收端点,它会引发错误。

var handle = _bus.ConnectReceiveEndpoint($"some-name", x =>
{
    x.ConfigureConsumeTopology = false;
    x.Consumer<TestConsumer>();

    var rabbitmqConfigurator = (IRabbitMqReceiveEndpointConfigurator)x;
        
    rabbitmqConfigurator.Bind<QueuedWorkflowItem2>(e =>
    {
        e.RoutingKey = "direct."+"somename";
        e.ExchangeType = ExchangeType.Direct;
    });
});

有什么方法可以用来检查在上面的代码之前是否已经添加了接收端点?

正式地说,不,没有特定的方法可以在运行时 return 所有已配置端点的详细信息。我会高度怀疑只是随机将端点连接到总线的应用程序,希望它不是重复的。看起来更像是一个应用程序实现问题,而不是与 MassTransit 相关的任何问题。

但是,作为 hack,您可以使用总线运行状况检查,return所有端点,并检查该名称是否已经存在。

var health = _busControl.CheckHealth();

return health.Endpoints.Any(e => e.Key == 'some-name');