Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to config consume to work with different messages types?(MassTransit)

I'm using MassTransit and Azure Service Bus as transport. I have created IAlert and IAlertExt that implements IAlert. I'm trying to publish two messages:

busControl.Publish<IAlert>(new Alert(customerId));
busControl.Publish<IAlertExt>(new AlertExt(customerId));

And write consumers to handle messages:

public class AlertConsumer : IConsumer<IAlert>
    {
        public async Task Consume(ConsumeContext<IAlert> context){
           ...
        }
    }

public class AlertExtConsumer : IConsumer<IAlertExt>
    {
        public async Task Consume(ConsumeContext<IAlertExt> context){
            ...
        }
    }

Now after publish both consumers retrieve one message that was published with generic interface.

How to force AlertExtConsumer retrieve messages not only published with IAlertExt and also with IAlert?

like image 965
Oleksandr Hrebeniuk Avatar asked Sep 13 '25 07:09

Oleksandr Hrebeniuk


1 Answers

You can put both interfaces in the same consumer, as shown below.

public class AlertConsumer : 
    IConsumer<IAlert>,
    IConsumer<IAlertExt>
{
    public async Task Consume(ConsumeContext<IAlert> context){
       ...
    }
    public async Task Consume(ConsumeContext<IAlertExt> context){
        ...
    }
}

Both interfaces will be bound to the same consumer queue.

like image 156
Chris Patterson Avatar answered Sep 15 '25 20:09

Chris Patterson