This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.

Publishing and Receiving Messages from a Queue

This sample demonstrates how persistent queues can be created and used in Message Broker using the RabbitMQ .NET/C# client. It first introduces a sample .NET client named QueuePublisher, which is used to publish messages to a known, created queue in WSO2 Message Broker. Then it introduces a sample .NET client named QueueConsumer to receive messages and print message content to the console.

Prerequisites

In order to run this sample:

Building the sample

  1. Create a QueueConsumer .NET client to receive messages from the test-queue queue by adding a class with the following code.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using RabbitMQ.Client;
      
      
    namespace QueueConsumer
    {
        class QueueConsumer
        {
            static void Main(string[] args)
            {
                QueueConsumer qConsumer = new QueueConsumer();
                qConsumer.GetMessage();
            }
      
            public void GetMessage()
            {
                //Setup the connection with the message broker
                ConnectionFactory factory = new ConnectionFactory();
                IProtocol protocol = Protocols.AMQP_0_9_1;
                factory.VirtualHost = "/carbon";
                factory.UserName = "admin";
                factory.Password = "admin";
                factory.HostName = "localhost";
                factory.Port = 5672;
                factory.Protocol = protocol;
                using (IConnection conn = factory.CreateConnection())
                {
                    using (IModel ch = conn.CreateModel())
                    {
                        //Declare a queue to retrieve messages.
                        ch.QueueDeclare("test-queue", true, false, false, null);
                        //Create the binding between queue and the exchance
                        ch.QueueBind("test-queue", "amq.direct", "test-queue");
                        QueueingBasicConsumer consumer = new QueueingBasicConsumer(ch);
                        ch.BasicConsume("test-queue", false, consumer);
    
                        while (true)
                        {
                            try
                            {
                                RabbitMQ.Client.Events.BasicDeliverEventArgs e = (RabbitMQ.Client.Events.BasicDeliverEventArgs)consumer.Queue.Dequeue();
                                byte[] body = e.Body;
                                string message = Encoding.UTF8.GetString(body);
                                Console.WriteLine("Received Message : " + message);
                                ch.BasicAck(e.DeliveryTag, false);
                            }
                            catch (OperationCanceledException e)
                            {
                                Console.WriteLine(e);
                                break;
                            }
                        }
                    }
                }
            }        
        }
    }

    At least one QueueConsumer binding should exist before sending messages to the queue. Therefore, this QueueConsumer class should be run before the QueuePublisher class. Alternatively, you can manually create the test-queue queue in the MB Management Console. See Adding Queues for detailed instructions.

  2. Create a QueuePublisher .NET client to send messages to the test-queue queue by adding a class with the following code.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using RabbitMQ.Client;
      
    namespace RabbitMQ
    {
        class QueuePublisher
        {
            static void Main(string[] args)
            {
                QueuePublisher publisher=new QueuePublisher();
                publisher.PublishMessage("This is a Test Message");
                Console.WriteLine("Message Sent");
                
                Console.ReadLine();
            }
     
      
            public void PublishMessage(string message)
            {
                //Setup the connection with the message broker
                ConnectionFactory factory = new ConnectionFactory();
                IProtocol protocol = Protocols.AMQP_0_9_1;
                factory.VirtualHost = "/carbon";
                factory.UserName = "admin";
                factory.Password = "admin";
                factory.HostName = "localhost";
                factory.Port = 5672;
                factory.Protocol = protocol;
                using (IConnection conn = factory.CreateConnection())
                {
                    using (IModel ch = conn.CreateModel())
                    {
                        IBasicProperties basicProperties = ch.CreateBasicProperties();
                        //Setting JMS Message ID.
                        basicProperties.MessageId = "ID:" + System.Guid.NewGuid().ToString();
                        //Setting content-type for message as we are sending a text message.
                        basicProperties.ContentType = "text/plain";
                        //Declare the exchange for the publisher.Here the exchange type is direct.
                        ch.ExchangeDeclare("amq.direct", "direct");
                        //Publish the message
                        ch.BasicPublish("amq.direct", "test-queue", basicProperties, Encoding.UTF8.GetBytes(message));
                    }
                }
            }
        }
    }

Executing the sample

Run this sample from your C# project.