0

I am creating a RestApi in asp.net core, and in one of my services, I publish a message to RabbitMQ using RawRabbit. That being said, I see the message is published in the RabbitMQ control panel when I have commented the subscriber part, and the number of consumers is 0, when I add the subscriber part number of consumers become 1 and the messages are getting consumed so there is no message in the control panel, BUT what is weird is that none of the codes ( in this case it's just a log ) in the subscriber does not run.

Publisher part:

public  async void RaiseAsync(string event_name, ShoppingCartItemAdded data) {

        const string EXCHANGE_NAME = "myRabbit";

        Action<IPublishContext> x = (ctx) => ctx.UsePublishConfiguration(xfg => xfg.OnExchange(EXCHANGE_NAME));//.WithRoutingKey("shoppingcartitemadded"));

        await this.Client.PublishAsync<ShoppingCartItemAdded>(data, x );
    }

Subscriber part:

 public class ShoppingCartItemAddedConsumer
{
    private readonly ILogger<ShoppingCartItemAddedConsumer> logger;
    private readonly IBusClient client;

    public ShoppingCartItemAddedConsumer(ILogger<ShoppingCartItemAddedConsumer> logger, IBusClient client)
    {
        this.logger = logger;
        this.client = client;

        this.logger.LogInformation("Subscriber created");
    }

    public async void Run()
    {
        const string QUEUE_NAME = "myWebApi";
        const string EXCHANGE_NAME = "myRabbit";

        this.logger.LogInformation("Registering subscriber");

        await client.SubscribeAsync<ShoppingCartItemAdded>(async msg => {

            this.logger.LogInformation("Message received from rabbitmq : {message}", msg);

        }, ctx => ctx.UseSubscribeConfiguration(cfg =>
            cfg.OnDeclaredExchange(dex => dex.WithName(EXCHANGE_NAME)
                .WithAutoDelete(false)
                .WithDurability(true)
                .WithType(ExchangeType.Topic)
            )
            .FromDeclaredQueue(dq => dq.WithName(QUEUE_NAME)
                .WithExclusivity(false)
                .WithDurability(true)
                .WithAutoDelete(false))));

        this.logger.LogInformation("Subscriber registered");
    }
}

And I registered the subscriber as a singleton service which I call its Run() method in the Startup.cs

var consumer = app.ApplicationServices.GetRequiredService<ShoppingCartItemAddedConsumer>();
        consumer.Run();

and this is the log at Startup of the services:

[09:02:25 INF] Subscriber created
[09:02:26 INF] Registering subscriber
[09:02:26 INF] Configuration action for shoppingcartitemadded found.
[09:02:26 INF] Declaring queue myWebApi.
[09:02:26 INF] Declaring exchange myRabbit.
[09:02:26 INF] Binding queue myWebApi to exchange myRabbit with routing key shoppingcartitemadded
[09:02:26 INF] Preparing to consume message from queue 'myWebApi'.
[09:02:26 INF] Subscriber registered

and the following is the log when publishing a message:

[14:13:35 INF] Setting 'Publish Acknowledge' for channel '3'
[14:13:35 INF] Setting up publish acknowledgement for 1 with timeout 0:00:01
[14:13:35 INF] Sequence 1 added to dictionary
[14:13:35 WRN] No body found in the Pipe context.
[14:13:35 INF] Performing basic publish with routing key shoppingcartitemadded on exchange myRabbitAPI.
[14:13:35 INF] Setting up publish acknowledgement for 2 with timeout 0:00:01
[14:13:35 INF] Sequence 2 added to dictionary
[14:13:35 WRN] No body found in the Pipe context.
[14:13:35 INF] Performing basic publish with routing key shoppingcartitemadded on exchange myRabbitAPI.
[14:13:35 INF] Executed action method HelloMicroServices.Controllers.ShoppingCartController.Post (HelloMicroServices), returned result Microsoft.AspNetCore.Mvc.OkObjectResult in 304.6292ms.
[14:13:35 INF] Executing ObjectResult, writing value of type 'HelloMicroServices.Datastores.Models.ShoppingCart'.
[14:13:35 INF] Executed action     HelloMicroServices.Controllers.ShoppingCartController.Post (HelloMicroServices) in 414.4309ms
[14:13:35 INF] Request finished in 475.1868ms 200 application/json; charset=utf-8
[14:13:35 INF] Recieived ack for 1
[14:13:35 INF] Recieived ack for 2
Saeed Ganji
  • 197
  • 17
  • Let's trouble shoot this in the issue you reported on Github (https://github.com/pardahlman/RawRabbit/issues/363) – pardahlman Jul 26 '18 at 06:44
  • That’s great, I’ll check your suggestion and try to make a repo to reproduce the issue if the solution didn’t resolve. – Saeed Ganji Jul 26 '18 at 19:55

0 Answers0