消息队列(一)——消息的简单发送与接收



    背景


          开发者经常遇到需要异步执行操作的情况(即过程不等到操作完成就开始)。消息队列提供一个中心位置或池,您可以在其中放置或从中提取数据,从而满足了这一要求。一个应用程序能够把消息存放在队列中,然后继续自己的业务,另一个应用程序在运行时再提取这些数据。



  简单理解

                

           感觉这里的消息队列还是一个典型的“buffer”思想:即就像喝水一样,如果有一杯水,我可能就直接喝掉了;但是如果有一壶水,我可能要先把水倒进杯子,然后再从杯子里喝水。


           消息队列在这里起到了个杯子的作用。



代码示例


       建立消息队列并发送一条消息

                           

          

            Message msg = null; //对列发送或读取的实际消息或数据
            MessageQueue mq = null; //接收/发送消息的MSMQ消息队列

            try
            {
                msg = new Message();
                msg.Priority = MessagePriority.Normal;//普通消息的优先级
                if (!MessageQueue.Exists(@".\Private$\TechRepublic"))
                {
                    mq = MessageQueue.Create(@".\Private$\TechRepublic");
                } //如果不存在则创建它
                else
                {
                    mq = new MessageQueue(@".\Private$\TechRepublic");
                }
                msg.Label = "Test Message";
                msg.Body = "this is only a test";
                mq.Send(msg);
                Console.WriteLine("message sent");

            }
            catch (System.Messaging.MessageQueueException ex)
            {

                Console.WriteLine("MSMQ Error:" + ex.ToString());
            }
            catch (Exception ex)
            {

                Console.WriteLine("error:" + ex.ToString());


            }
            finally
            { mq.Close(); }

 



       接收消息




              

 Message msg = null;
                MessageQueue mq = null;
                try
                {
                    mq = new MessageQueue(@".\Private$\Tepublic");
                    msg = mq.Receive(new TimeSpan(0, 0, 3));//timespan对象指定异常出现时系统的等待时间。
                    msg.Formatter = new XmlMessageFormatter(new string[] { "System.String,mscorlib" }); //对象被转换成字符串读取前面存储的文本
                    mq.Receive(); //从队列中读取消息,它的值显示在控制台中
                    Console.WriteLine(msg.Label.ToString() + "__" + msg.Body.ToString());

                }
                catch (System.Messaging.MessageQueueException ex)
                {
                    
                    Console.WriteLine("MSMQ Error"+ex.ToString());
                }
                catch(Exception ex)
                {
                
                    Console.WriteLine("Error:"+ex.ToString());
                }finally
                {
                
                    mq.Close();
                
                }




          未完待续,具体问题还没分析~







       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水田如雅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值