1) Create Class
public class RequestMessage
{
public string UserId { get; set; }
public string RequestType { get; set; }
}
2. Creating Client 1 class
This class creates queue if it doesn’t exist and sends message to it.
class MSMQSender
{
public void SendMessage(string userId, string requestType)
{
private string queuePath = @".\Private$\test";
MessageQueue mq;
// open or create message queue
if (MessageQueue.Exists(queuePath))
mq = new MessageQueue(queuePath);
else
mq = MessageQueue.Create(queuePath);
Message message = new Message();
message.Recoverable = true;
RequestMessage rm = new RequestMessage();
rm.UserId = userId;
rm.RequestType = requestType;
message.Body = rm;
mq.Send(rm);
}
}
3. Creating Server class
Class creates or open queue receives messages and processes them by worker object. Worker can only process single message. It returns control to server object when processing is done.
class Server
{
public Server()
{
MessageQueue mq;
// open or create message queue
// …
// set type of message
((XmlMessageFormatter)mq.Formatter).TargetTypes = new Type[] { typeof(RequestMessage) };
while(true)
{
Message message = mq.Receive();
RequestMessage rm = (RequestMessage)message.Body;
Worker worker = new Worker(rm.UserId, rm.RequestType);
worker.DoJob();
}
}
}
4. Creating Client 2 class
Class reads all messages in the queue, checks its content and adds it to the list . It is a simple queue monitor.
class MSMQReceiver
{
public List
{
// open or create message queue
// …
// set type of message
Cursor cursor = mq.CreateCursor();
Message m = mq.Peek(new TimeSpan(1), cursor,
PeekAction.Current);
RequestMessage rm = (RequestMessage)m.Body;
rm.UserId == userId)
list.Add(rm.RequestType);
while ((m = mq.Peek(new TimeSpan(1), cursor,
PeekAction.Next)) != null)
{
rm = (RequestMessage)m.Body;
if (rm.UserId == userId)
list.Add(rm.RequestType);
}
return list;
}
}
No comments:
Post a Comment