Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel3
minLevel3

Introduction

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 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 named QueueConsumer to  to receive messages and print message content to the console.

Table of Contents
maxLevel3
minLevel3

Prerequisites

In order to run this sample:

...

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

    Code Block
    languagejava
    /*
    *  Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
    *
    *  WSO2 Inc. licenses this file to you under the Apache License,
    *  Version 2.0 (the "License"); you may not use this file except
    *  in compliance with the License.
    *  You may obtain a copy of the License at
    *
    *    http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing,
    * software distributed under the License is distributed on an
    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    * KIND, either express or implied.  See the License for the
    * specific language governing permissions and limitations
    * under the License.
    */
     
    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;
                            }
                        }
                    }
                }
            }        
        }
    }
    Info

    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.

    Code Block
    languagejava
    /*
    *  Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
    *
    *  WSO2 Inc. licenses this file to you under the Apache License,
    *  Version 2.0 (the "License"); you may not use this file except
    *  in compliance with the License.
    *  You may obtain a copy of the License at
    *
    *    http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing,
    * software distributed under the License is distributed on an
    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    * KIND, either express or implied.  See the License for the
    * specific language governing permissions and limitations
    * under the License.
    */
    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));
                    }
                }
            }
        }
    }

...