zoukankan      html  css  js  c++  java
  • MSMQ微软消息队列的学习(先进先出)

    学习通过MSMQ发送简单类型的消息和复杂类型的消息

    看代码:

     
    namespace MSMQ
    {
        class Program
        {
            static void Main(string[] args)
            {
                const string path = @".\private$\myQueue";
                MyQueue.Createqueue(path);
                MyQueue.SendMessage(path, "OK1");//队列,先进先出
                MyQueue.SendMessage(path, "Ok2");
                MyQueue.SendMessage(path, "Ok3");
                MyQueue.ReceiveMessage(path);
     
                MyQueue.SendMessage(path, new Book { BookId = 1, BookName = "Code Complete", BookPrice = 98, BookAuthor = "zzl" });
                MyQueue.SendMessage(path, new Book { BookId = 2, BookName = "Move Method", BookPrice = 47, BookAuthor = "zzl" });
     
                Console.WriteLine(MyQueue.ReceiveEntityMessage(path));
                Console.ReadKey();
            }
     
        }
     
        /// <summary>
        /// MSMQ消息队列
        /// </summary>
        public static class MyQueue
        {
            /// <summary>
            /// 通过Create方法创建使用指定路径的新消息队列
            /// </summary>
            /// <param name="queuePath"></param>
            public static void Createqueue(string queuePath)
            {
                try
                {
                    if (!MessageQueue.Exists(queuePath))
                    {
                        MessageQueue.Create(queuePath);
                    }
                    else
                    {
                        Console.WriteLine(queuePath + "已经存在!");
                    }
                }
                catch (MessageQueueException e)
                {
                    Console.WriteLine(e.Message);
                }
            }
     
            /// <summary>
            /// 连接消息队列并发送消息到队列
            /// </summary>
            public static void SendMessage(string path, string msg)
            {
                try
                {
                    //连接到本地的队列
                    MessageQueue myQueue = new MessageQueue(path);
     
                    Message myMessage = new Message();
                    myMessage.Body = msg;
                    myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
                    //发送消息到队列中
                    myQueue.Send(myMessage);
                }
                catch (ArgumentException e)
                {
                    Console.WriteLine(e.Message);
                }
            }
     
     
            /// <summary>
            /// 连接消息队列并从队列中接收消息
            /// </summary>
            public static void ReceiveMessage(string path)
            {
                //连接到本地队列
                MessageQueue myQueue = new MessageQueue(path);
                myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
                try
                {
                    //从队列中接收消息
                    Message myMessage = myQueue.Receive();
                    string context = (string)myMessage.Body; //获取消息的内容
                    Console.WriteLine("消息内容为:" + context);
                }
                catch (MessageQueueException e)
                {
                    Console.WriteLine(e.Message);
                }
                catch (InvalidCastException e)
                {
                    Console.WriteLine(e.Message);
                }
            }
     
            /// <summary>
            /// 清空指定队列的消息
            /// </summary>
            public static void ClearMessage(string path)
            {
                MessageQueue myQueue = new MessageQueue(path);
                myQueue.Purge();
            }
     
            /// <summary>
            /// 连接队列并获取队列的全部消息
            /// </summary>
            public static void GetAllMessage(string path)
            {
                //连接到本地队列
                MessageQueue myQueue = new MessageQueue(path);
                Message[] message = myQueue.GetAllMessages();
                XmlMessageFormatter formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
                foreach (Message t in message)
                {
                    t.Formatter = formatter;
                    Console.WriteLine(t.Body.ToString());
                }
            }
     
            /// <summary>
            /// 连接消息队列并发送消息到队列
            /// </summary>
            public static bool SendMessage(string path, Book book)
            {
                bool flag = false;
                try
                {
                    //连接到本地的队列
                    MessageQueue myQueue = new MessageQueue(path);
     
                    System.Messaging.Message myMessage = new System.Messaging.Message(book);
                    myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(Book) });
                    //发送消息到队列中
                    myQueue.Send(myMessage);
                    flag = true;
                }
                catch (ArgumentException e)
                {
                    Console.WriteLine(e.Message);
                }
                return flag;
            }
     
            /// <summary>
            /// 连接消息队列并从队列中接收消息
            /// </summary>
            public static string ReceiveEntityMessage(string path)
            {
                //连接到本地队列
                MessageQueue myQueue = new MessageQueue(path)
                                           {
                                               Formatter = new XmlMessageFormatter(new Type[] { typeof(Book) })
                                           };
                try
                {
                    //从队列中接收消息
                    System.Messaging.Message myMessage = myQueue.Peek();
                    Book book = myMessage.Body as Book; //获取消息的内容
                    return string.Format("编号:{0},书名:{1},作者:{2},定价:{3}",
                        book.BookId,
                        book.BookName,
                        book.BookAuthor,
                        book.BookPrice);
                }
                catch (MessageQueueException e)
                {
                    Console.WriteLine(e.Message);
                }
                catch (InvalidCastException e)
                {
                    Console.WriteLine(e.Message);
                }
                return null;
            }
     
          
        }
        public interface IEntity { }
        public class Book : IEntity
        {
            public int BookId { get; set; }
            public string BookName { get; set; }
            public string BookAuthor { get; set; }
            public double BookPrice { get; set; }
        }
     
    }
  • 相关阅读:
    【转】sublime text 2中Emmet插件8个常用的技巧
    程序猿崛起3——这一次,我用行动说话
    《Effective Java》学习笔记——积累和激励
    程序猿崛起2——互联网时代下的新潮流和新活法
    【非技术】做好属于自己的作品,然后让世界所有人都记住你
    【非技术】实现理想的第一步就是做自己
    【原创】程序猿崛起
    人生苦短,我用python——当我在玩python的时候我玩些什么
    一个新人如何学习在大型系统中添加新功能和Debug
    一个应届毕业生入职30天后的工作总结——作息
  • 原文地址:https://www.cnblogs.com/lori/p/2140388.html
Copyright © 2011-2022 走看看