Producer / Consumer CShart


Downloads Lib:

Examples: MS Simple Asynchronous Consumer Example


Producer

private void btnSend_Click(object sender, EventArgs e)
{
    IConnectionFactory factory = new ConnectionFactory("tcp://172.16.0.231:61616");
    using (IConnection connection = factory.CreateConnection())
    {
        connection.ClientId = "C#Producer";
        connection.Start();

        using (ISession session = connection.CreateSession())
        {
            IDestination destination = SessionUtil.GetDestination(session, "queue://queue.test");

            using (IMessageProducer producer = session.CreateProducer(destination))
            {
                connection.Start();
                producer.DeliveryMode = MsgDeliveryMode.Persistent;

                string idMessage = "123";
                string serviceName = "ServiceTest";
                string moduleService = "Pagamento";

                ITextMessage request = session.CreateTextMessage(txtMessage.Text);
                request.NMSCorrelationID = idMessage;
                request.Properties["service"] = serviceName;
                request.Properties["module"] = moduleService;

                producer.Send(request);

                Console.WriteLine("Producer ID: " + idMessage + " | Message: " + txtMessage.Text);
            }

        }
    }
}

Consumer

    public partial class ServiceJMS : ServiceBase
    {

        protected static AutoResetEvent semaphore = new AutoResetEvent(false);
        IConnectionFactory factory = new ConnectionFactory("tcp://172.16.0.231:61616");
        protected static TimeSpan receiveTimeout = TimeSpan.FromSeconds(10);
        IConnection connection = null;
        ISession session = null;

        public ServiceJMS()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            WriteLog("OnStart()...");

            this.connection = factory.CreateConnection();
            connection.ClientId = "C#Listener";
            connection.Start();

            this.session = connection.CreateSession();
            IDestination destination = SessionUtil.GetDestination(session, "queue://queue.test");
            IMessageConsumer consumer = session.CreateConsumer(destination);
            consumer.Listener += new MessageListener(OnMessage);

            semaphore.WaitOne((int)receiveTimeout.TotalMilliseconds, true);
        }

        protected override void OnStop()
        {
            WriteLog("OnStop()...");
        }

        private static void WriteLog(string message)
        {
            using (StreamWriter sw = new StreamWriter("c:\\jms-consumer.txt", true))
            {
                try
                {
                    sw.WriteLine(message);
                    sw.Flush();
                }
                catch (Exception e)
                {
                    sw.WriteLine("Ocorreu um erro durante a gravação de log: " + e.Message);
                }
            }
        }

        protected static void OnMessage(IMessage receivedMsg)
        {
            ITextMessage msgText = receivedMsg as ITextMessage;
            string msg = "Received ID: " + msgText.NMSCorrelationID + " | Message: " + msgText.Text;
            WriteLog(msg);
            semaphore.Set();
        }

    }

Proceducer JMS Email/XML - Email com anexo

//////////////////////////////////////////////////////////////////////////////
// Load File to byte[]
//////////////////////////////////////////////////////////////////////////////
String path = "c:\\anexo.pdf";
FileStream file = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
byte[] anexoPdfArr = new byte[file.Length];
file.Read(anexoPdfArr, 0, (int)file.Length);

//////////////////////////////////////////////////////////////////////////////
// Populate Attachment Class
//////////////////////////////////////////////////////////////////////////////
EmailAttachment attr = new EmailAttachment();
attr.filename = "anexo.pdf";
attr.mimeType = "application/pdf";
attr.attachmentBase64 = Convert.ToBase64String(anexoPdfArr);

//////////////////////////////////////////////////////////////////////////////
// Populate Email class
//////////////////////////////////////////////////////////////////////////////
Email email = new Email();
email.attachments = new EmailAttachment[1] { attr };
email.subject = "email test";
email.from = "[email protected]";
email.to = "[email protected]";
email.body = "Corpo Email";
email.cc = new String[2] { "[email protected]", "[email protected]" };

//////////////////////////////////////////////////////////////////////////////
// Serialize Email Class to XMl
//////////////////////////////////////////////////////////////////////////////
StringBuilder xml = new StringBuilder();
XmlSerializer serializer = new XmlSerializer(typeof(Email), new XmlRootAttribute("Email") { Namespace = "http://www.dellavolpe.com.br/email" });
XmlWriter writer = XmlWriter.Create(xml);
XmlSerializerNamespaces nspace = new XmlSerializerNamespaces();
nspace.Add(string.Empty, "http://www.dellavolpe.com.br/email");
serializer.Serialize(writer, email, nspace);
writer.Close();
string strXml = xml.ToString();
strXml = strXml.Replace("Email", "email");
strXml = strXml.Replace("EmailAttachments", "attachments");
strXml = strXml.Replace("emailAttachment", "attachment");

//////////////////////////////////////////////////////////////////////////////
// Send XML to JMS Queue
//////////////////////////////////////////////////////////////////////////////
IConnectionFactory factory = new ConnectionFactory("tcp://172.16.0.231:61616");
using (IConnection connection = factory.CreateConnection())
{
    connection.Start();
    using (ISession session = connection.CreateSession())
    {
        IDestination destination = SessionUtil.GetDestination(session, "queue://queue.Email");
        using (IMessageProducer producer = session.CreateProducer(destination))
        {
            connection.Start();
            producer.DeliveryMode = MsgDeliveryMode.Persistent;
            ITextMessage request = session.CreateTextMessage(strXml);
            producer.Send(request);
        }

    }
}

results matching ""

    No results matching ""