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:
- Download and add the
RabbitMQ.Client.dll
file as a reference in your .NET project. You can download the file from http://www.rabbitmq.com/dotnet.html or from the WSO2 repository. - See Prerequisites to Run the MB Samples for a list of other prerequisites.
Building the sample
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.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.