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);
}
}
}