Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Message received event in RabbitMQ C# API

Tags:

c#

rabbitmq

I'm trying to implement an WinForm RabbitMQ client, in which I'm receiving message from the server as follows-

private void Form1_Load(object sender, System.EventArgs e)
{
    backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    var factory = new ConnectionFactory() { HostName = "192.168.100.6", Password = "pass", UserName = "username" };
    using (var connection = factory.CreateConnection())
    {
        using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare("CallCenter", false, false, false, null);  
            var consumer = new QueueingBasicConsumer(channel);
            channel.BasicConsume("CallCenter", true, consumer);
            while (true)
            {
                var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                var body = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                MessageBox.Show(message);
            }
        }
    }
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (backgroundWorker1.IsBusy)
    {
        backgroundWorker1.CancelAsync();
    }

    backgroundWorker1.Dispose();
}

I'm pretty sure it's not a good approach. Rather, It would be better if there is an OnMessageReceived event.

Do you have any good example about event-based message receiving in RabbiMQ?

like image 319
s.k.paul Avatar asked Dec 03 '25 12:12

s.k.paul


1 Answers

The way you're doing it is correct. consumer.Queue.Dequeue(); is essentially an OnMessageReceived, it is a blocking call that sits and waits for messages to be sent to it from rabbit.

like image 65
jhilden Avatar answered Dec 06 '25 02:12

jhilden



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!