Connecting to AWS-MQ using C# | .NET Developers



In this fast driven technical world we have new technologies and one of them is AWS-MQ but most of our legacy or web applications will have code written in C#. I will try to explain how you can connect to AWS-MQ using C# code.

Explaining two scenarios -
  1. If we have SSO Login to AWS Console.
  2. If we have AWS account with IAM login.

1.  C# Code to connect with AWS-MQ when user have SSO Login -

  •    Add References Apache.NMS and Apache.NMS.ActiveMQ -
               
  •   Headers used -
            using System;
            using Apache.NMS;
            using Apache.NMS.ActiveMQ.Transport.Tcp;
            using Apache.NMS.ActiveMQ.Transport;
            using Apache.NMS.ActiveMQ;
            
using Apache.NMS.ActiveMQ.Util;
  •   Create a new function as producer ( ), this will the code which will command AWS-MQ what to create queue and store message.
                      
  • Create a new function as consumer ( ), this will the code which will fetch what is stored in AWS-MQ and used to showcase from .NET -
                    

2.  C# Code to connect with AWS-MQ when user have IAM Login -

  •   Write the same code, just replace the amq_broker with aws access key Id and secret access key. And try passing it. It will work for you.

Complete Code -

using System;
using Apache.NMS;
using Apache.NMS.ActiveMQ.Transport.Tcp;
using Apache.NMS.ActiveMQ.Transport;
using Apache.NMS.ActiveMQ;
using Apache.NMS.ActiveMQ.Util;
using System.Threading;
namespace WindowsService1
{
    public class CSharp_to_AWSMQ
    {
        public static void producer()
        {
            SslTransportFactory ssl = new SslTransportFactory();
            string amq_broker = "ssl://b-19ffa89d-5b13-48a2-a604-3e8975962250-1.mq.us-east-1" +
                ".amazonaws.com:61617?nms.AsyncSend=true";
            ssl.ServerName = "52.4.134.145"; //IP of server where AMQ is running
            ssl.SslProtocol = "Tls";
            ssl.AcceptInvalidBrokerCert = true;
            Uri uri = new Uri(amq_broker); 
            ITransport transport = ssl.CreateTransport(uri);
            //transport.Start();
            Connection connection = new Connection(uri, transport, new IdGenerator())
            {
                UserName = "Soccer",
                Password = "Soccer7654321"
            };
            connection.Start();
            ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
            IDestination dest = session.GetQueue("BishalQueue");
            IMessageProducer producer = session.CreateProducer(dest);
            producer.DeliveryMode = MsgDeliveryMode.NonPersistent;
            var text = "Acknowlegement";
            var msg = session.CreateTextMessage(text);
            producer.Send(msg);
            Console.WriteLine("Msg Printed from Producer: " + text);
            connection.Close();
            // connection.Start();  // -> here is error: 
        }
        
        public static void consumer()
        {
            SslTransportFactory ssl = new SslTransportFactory();
            string amq_broker = "ssl://b-19ffa89d-5b13-48a2-a604-3e8975962250-1.mq.us-east-1" +
                ".amazonaws.com:61617?nms.AsyncSend=true";
            ssl.ServerName = "52.4.134.145"; //IP of server where AMQ is running
            ssl.SslProtocol = "Tls";
            ssl.AcceptInvalidBrokerCert = true;
            Uri uri = new Uri(amq_broker);
            ITransport transport = ssl.CreateTransport(uri);
            //transport.Start();
            Connection connection = new Connection(uri, transport, new IdGenerator())
            {
                UserName = "Soccer",
                Password = "Soccer7654321"
            };
            connection.Start();
            ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
            IDestination dest = session.GetQueue("BishalQueue");
            IMessageConsumer consumer = session.CreateConsumer(dest);
            IMessage consumerMessage = consumer.Receive();
            ITextMessage consumerTextMesaage = (ITextMessage)consumerMessage;
            Console.WriteLine("Msg Recieved from Consumer: " + consumerTextMesaage.Text);
            connection.Close();
        }

        public static void Main(string[] args)
        {
            Console.WriteLine("Creating Producer Thread");
            Thread prod = new Thread(producer);
            Console.WriteLine("Creating Consumer Thread");
            Thread cons = new Thread(consumer);
            prod.Start();
            cons.Start();
        }
    }
}


For any queries please comment below i will try solving your queries.
  

Comments

  1. How do you read the count from queue ?

    ReplyDelete
    Replies
    1. @Ali - Can you please explain in detail, count of what you need from queue?

      Delete

Post a Comment