MSMQ

MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。

消息Message是由通信的双方所需要传递的信息。

队列的类型主要包括一下几种:

“公共队列”在整个“消息队列”网络中复制,并且有可能由网络连接的所有站点访问。

“专用队列”不在整个网络中发布。相反,它们仅在所驻留的本地计算机上可用。专用队列只能由知道队列的完整路径名或标签的应用程序访问。

“管理队列”包含确认在给定“消息队列”网络中发送的消息回执的消息。指定希望 MessageQueue 组件使用的管理队列(如果有的话)。

“响应队列”包含目标应用程序接收到消息时返回给发送应用程序的响应消息。指定希望 MessageQueue 组件使用的响应队列(如果有的话)。

优点:稳定、消息优先级、脱机能力以及安全性,有保障的消息传递和执行许多业务处理的可靠的防故障机制。

缺点:MSMQ不适合于Client需要Server端实时交互情况.大量请求时候,响应延迟.

安装MSMQ

 

 

.NET编程

1、命名空间 usingSystem.Messaging;

2、默认存储路径 C:\WINDOWS\system32\msmq\storage

3、创建消息队列:MessageQueuemq = MessageQueue.Create(@".\Private$\LeeMSMQ");

4、删除队列:MessageQueue.Delete(@".\Private$\LeeMSMQ");

5、发送消息:MessageQueuemq = new MessageQueue(@".\Private$\LeeMSMQ");

            mq.Send("sayhello1,hellomsmq!", "sayhello1");

            mq.Send("sayhello2,hellomsmq!", "sayhello2");

6、接受并删除消息:MessageQueue mq = new MessageQueue(@".\Private$\LeeMSMQ")

           Message msg = mq.Receive();//引用的队列中可用的第一条消息

7、接受但不删除消息:Message msg = mq.Peek();

8、删除所有消息:Message msg = mq.Purge();

9、返回本机所有私有队列的消息

      //返回本机所有私有队列的消息

             foreach (MessageQueue mq inMessageQueue.GetPrivateQueuesByMachine("liyanping"))

            {

                mq.Formatter = new XmlMessageFormatter(new string[] { "System.String" });

                Message[]msg = mq.GetAllMessages();

               foreach (Messagem in msg)

                {

                    Console.WriteLine("label:{0},body:{1}", m.Label, m.Body);

                }

            }

10、返回指定队列的消息

           if(MessageQueue.Exists(@".\Private$\LeeMSMQ"))//判断私有消息是否存在

            {

                using(MessageQueue mq = newMessageQueue(@".\Private$\LeeMSMQ"))

                {

                    mq.Formatter = new XmlMessageFormatter(new string[] { "System.String" });//设置消息队列格式化器

                    Messagemsg = mq.Receive();//接收消息

                    Console.WriteLine("label:{0},body: {1}", msg.Label,msg.Body);//输出消息

                    MessageQueue.Delete(@".\Private$\LeeMSMQ");

                }

            } 


原文地址:http://www.cnblogs.com/tenghoo/archive/2009/11/05/1596456.html


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值