详解C#如何使用消息队列MSMQ

 更新时间:2024年01月05日 08:40:02   作者:zhaotianff  
消息队列 (MSMQ Microsoft Message Queuing)是MS提供的服务,也就是Windows操作系统的功能,下面就跟随小编一起了解一下C#中是如何使用消息队列MSMQ的吧

最近项目用到消息队列,找资料学习了下。把学习的结果 分享出来

首先说一下,消息队列 (MSMQ Microsoft Message Queuing)是MS提供的服务,也就是Windows操作系统的功能,并不是.Net提供的。

MSDN上的解释如下:

Message Queuing (MSMQ) technology enables applications running at different times to communicate across heterogeneous networks and systems that may be temporarily offline.

Applications send messages to queues and read messages from queues.

The following illustration shows how a queue can hold messages that are generated by multiple sending applications and read by multiple receiving applications.

消息队列(MSMQ)技术使得运行于不同时间的应用程序能够在各种各样的网络和可能暂时脱机的系统之间进行通信。

应用程序将消息发送到队列,并从队列中读取消息。

下图演示了消息队列如何保存由多个发送应用程序生成的消息,并被多个接收应用程序读取。

消息一旦发送到队列中,便会一直存在,即使发送的应用程序已经关闭。

 MSMQ服务默认是关闭的,(Window7及以上操作系统)按以下方式打开

1、打开运行,输入"OptionalFeatures",钩上Microsoft Message Queue(MSMQ)服务器。

(Windows Server 2008R2及以上)按以下方式打开

2、打开运行,输入"appwiz.cpl",在任务列表中选择“打开或关闭Windows功能”

然后在"添加角色"中选择消息队列

 消息队列分为以下几种,每种队列的路径表示形式如下:

公用队列 MachineName\QueueName

专用队列 MachineName\Private$\QueueName

日记队列 MachineName\QueueName\Journal$

计算机日记队列 MachineName\Journal$

计算机死信队列 MachineName\Deadletter$

计算机事务性死信队列 MachineName\XactDeadletter$

这里的MachineName可以用 “."代替,代表当前计算机

 需要先引用System.Messaging.dll

创建消息队列

//消息队列路径
            string path = ".\\Private$\\myQueue";
            MessageQueue queue;
            //如果存在指定路径的消息队列
            if(MessageQueue.Exists(path))
            {
                //获取这个消息队列
                queue = new MessageQueue(path);
            }
            else
            {
                //不存在,就创建一个新的,并获取这个消息队列对象
                queue = MessageQueue.Create(path);
            }

发送字符串消息

System.Messaging.Message msg = new System.Messaging.Message();
                    //内容
                    msg.Body = "Hello World";
                    //指定格式化程序
                    msg.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
                    queue.Send(msg);

发送消息的时候要指定格式化程序,如果不指定,格式化程序将默认为XmlMessageFormatter(使用基于 XSD 架构定义的 XML 格式来接收和发送消息。)

接收字符串消息

//接收到的消息对象
              System.Messaging.Message msg = queue.Receive();
              //指定格式化程序
              msg.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
              //接收到的内容
              string str = msg.Body.ToString();

 发送二进制消息(如图像)

引用 System.Drawing.dll

System.Drawing.Image image = System.Drawing.Bitmap.FromFile("a.jpg");
Message message = new Message(image, new BinaryMessageFormatter());          
queue.Send(message);

接收二进制消息

System.Messaging.Message message = queue.Receive();
System.Drawing.Bitmap image= (System.Drawing.Bitmap)message.Body;       
3image.Save("a.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

获取消息队列的消息的数量 

int num  = queue.GetAllMessages().Length;

清空消息队列

queue.Purge();

以图形化的方式查看消息队列中的消息

运行输入 compmgmt.msc,打开计算机管理,选择[服务和应用程序-消息队列]。只要消息队列中的消息没有被接收,就可以在这里查看得到。

到此这篇关于详解C#如何使用消息队列MSMQ的文章就介绍到这了,更多相关C#消息队列MSMQ内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c#通过DES加密算法加密大文件的方法

    c#通过DES加密算法加密大文件的方法

    这篇文章主要介绍了c#通过DES加密算法加密大文件的方法,涉及C#文件操作与DES加密的相关技巧,需要的朋友可以参考下
    2015-05-05
  • C# winfrom实现读取修改xml

    C# winfrom实现读取修改xml

    这篇文章主要为大家详细介绍了C# winfrom实现读取修改xml的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • C#使用Log4.net记录日志文件

    C#使用Log4.net记录日志文件

    这篇文章介绍了C#使用Log4.net记录日志文件的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • c# 连接access数据库config配置

    c# 连接access数据库config配置

    c# 连接access数据库config配置,需要的朋友可以参考一下
    2013-02-02
  • C#实现winform渐变效果的方法

    C#实现winform渐变效果的方法

    这篇文章主要介绍了C#实现winform渐变效果的方法,涉及到窗体的设计与属性的修改等技巧,需要的朋友可以参考下
    2014-10-10
  • 如何搭建新的WPF项目框架

    如何搭建新的WPF项目框架

    这篇文章主要介绍了如何搭建新的WPF项目框架,在项目开发中比较常见的开发模式就是MVVM模式,使用MVVM框架开发好处:1、框架较轻,2、学习成本低、3、适用大多数中小型项目,4、相对于微软的prism框架更容易上手,需要的朋友可以参考下
    2015-07-07
  • c#与WMI使用技巧集

    c#与WMI使用技巧集

    c#与WMI使用技巧集...
    2007-03-03
  • C#排序算法之快速排序解析

    C#排序算法之快速排序解析

    这篇文章主要为大家详细介绍了C#排序算法之快速排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • C#中Override关键字和New关键字的用法详解

    C#中Override关键字和New关键字的用法详解

    这篇文章主要介绍了C#中Override关键字和New关键字的用法,需要的朋友可以参考下
    2016-01-01
  • C#编程获取IP地址的方法示例

    C#编程获取IP地址的方法示例

    这篇文章主要介绍了C#编程获取IP地址的方法,结合实例形式分析了C#获取客户端IP地址的具体实现技巧,需要的朋友可以参考下
    2017-01-01

最新评论