Я пытаюсь понять, что происходит при использовании MassTransit таким образом, чтобы не полностью полагаться на эту библиотеку абстракционного слоя, а чтобы действительно знать и понимать, что создается под капотом и почему.
В моем приложении я регистрирую потребителей следующим образом:
container.AddMassTransit(x =>
{
x.AddBus(context => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(configurationProvider.RabbitHostName);
x.AddConsumer<FactAddedHandler>();
x.AddConsumer<FactAddedOrderHandler>();
x.AddConsumer<FactCategoryHandler>();
cfg.ConfigureEndpoints(container);
}));
});
Следуйте за мной по этому вопросу, поэтому пока у нас есть такой сценарий:
Когда я проверяю, какие очереди создаются через
rabbitmqctl list_queues Имена сообщений потребителей
Я вижу:
FactAddedHandler 0 1
FactAddedOrderHandler 0 1
FactCategoryHandler 0 1
что заставляет меня поверить, что на каждого конкретного потребителя есть очередь c. Итак, у нас есть такой сценарий:
Давайте посмотрим, как определяются эти обработчики:
internal class FactAddedHandler : IConsumer<FactAddedIntegrationEvent>
{
//
}
internal class FactAddedOrderHandler : IConsumer<FactAddedIntegrationEvent>
{
//
}
internal class FactCategoryHandler : IConsumer<FactCategoryIntegrationEvent>
{
//
}
Итак, первые 2 обработчика ( FactAddedHandler и FactAddedOrderHandler ) подписываются на одно и то же событие ( FactAddedIntegrationEvent ), а другое ( FactCategoryHandler **) подписывается на другое событие (** FactCategoryIntegrationEvent ).
Поэтому я ожидаю, что существует "по крайней мере" разветвленный обмен поверх первых 2 очередей, передающих FactAddedIntegrationEvent . Итак, давайте проверим обмены через:
rabbitmqctl list_exchanges имя типа
и в результате:
FactCategoryHandler fanout
FactAddedOrderHandler fanout
FactAddedHandler fanout
IntegrationEvents:FactAddedIntegrationEvent fanout
IntegrationEvents:FactCategoryIntegrationEvent fanout
Итак .. что бы я ожидается, что IntegrationEvents: FactAddedIntegrationEvent - это разветвленный обмен, который транслирует FactAddedIntegrationEvent .
Я также считаю, что masstransit по умолчанию создает другой обмен IntegrationEvents: FactCategoryIntegrationEvent таким образом, что легко добавить других потребителей к тому же событию, даже если в моем случае есть только один.
Поэтому мы в конечном итоге в этом сценарии, который все еще имеет смысл:
Я НЕ понимаю и не хочу объяснять причину создания трех других оставшихся обменов. Какова их роль? Почему они там? Заранее спасибо!