Masstransit with RabbitMQ using .net creates 2 Exchanges for given Type

Viewed 17

Below is a sample POC developed in ASP.net Core 6.0 API that uses MassTransit and RabbitMQ to simulate a simple publish/subscribe using MassTransit consumer. However when the code is executed it results in creation of 2 Exchanges and 1 Queue in RabbitMQ.

Program.cs

builder.Services.AddMassTransit(msConfig =>
{
    msConfig.AddConsumers(Assembly.GetEntryAssembly());

    msConfig.UsingRabbitMq((hostcontext, cfg) =>
    {
        cfg.Host("localhost", 5700, "/", h =>
        {

           h.Username("XXXXXXXXXXX");
           h.Password("XXXXXXXXXXX");

        });

        cfg.ConfigureEndpoints(hostcontext);
    });
});

OrderConsumer.cs

public class OrderConsumer : IConsumer<OrderDetails>
{
    readonly ILogger<OrderConsumer> _logger;
    public OrderConsumer(ILogger<OrderConsumer> logger)
    {
        _logger = logger;
    }

    public Task Consume(ConsumeContext<OrderDetails> context)
    {
        _logger.LogInformation("Message picked by OrderConsumer. OrderId : {OrderId}", context.Message.OrderId);

        return Task.CompletedTask;
    }
}

Model

    public class OrderDetails
{
    public int OrderId { get; set; }
    public string OrderName { get; set; }
    public int Quantity { get; set; }
}

Controller

    readonly IPublishEndpoint _publishEndpoint;

    [HttpPost("PostOrder")]
    public async Task<ActionResult> PostOrder(OrderDetails orderDetails)
    {
        await _publishEndpoint.Publish<OrderDetails>(orderDetails);

        return Ok();
    }

Output from Asp.Net Output from Asp.Net

As highlighted 2 Exchanges are created Sample:OrderDetails and Order.

enter image description here

However, the Sample:OrderDetails is bound to Order (Exchange)

enter image description here

And the Order (Exchange) routes to "Order" queue.

enter image description here

enter image description here

So, the question is regarding the 2 Exchanges that got created where I am not sure if that's per design or its a mistake on the code that led to both getting created and if its per design, why the need for 2 exchange.

0 Answers
Related