详解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#/VB.NET读取条码类型及条码在图片中的坐标位置实例

    C#/VB.NET读取条码类型及条码在图片中的坐标位置实例

    我们在创建条形码时,如果以图片的方式将创建好的条码保存到指定文件夹路径,可以在程序中直接加载图片使用;已生成的条码图片,需要通过读取图片中的条码信息,如条码类型、条码绘制区域在图片中的四个顶点坐标位置等,可参考本文中的方法
    2023-10-10
  • C#使用IComparer自定义List类实现排序的方法

    C#使用IComparer自定义List类实现排序的方法

    这篇文章主要介绍了C#使用IComparer自定义List类实现排序的方法,涉及C#使用IComparer接口定义List类进行排序的相关技巧,需要的朋友可以参考下
    2015-08-08
  • C# SetWindowPos函数实例详解

    C# SetWindowPos函数实例详解

    在C#中,SetWindowPos函数用于设置窗口的位置和大小,这篇文章主要介绍了C# SetWindowPos函数实例详解,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • 举例讲解C#中自动实现的属性

    举例讲解C#中自动实现的属性

    这篇文章主要介绍了C#中自动实现的属性,包括使用自动实现的属性实现轻量类的方法,需要的朋友可以参考下
    2016-01-01
  • Unity3D实现控制摄像机移动

    Unity3D实现控制摄像机移动

    这篇文章主要为大家详细介绍了Unity3D实现控制摄像机移动 ,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • 学习C#静态函数及变量的一个精典例子与代码

    学习C#静态函数及变量的一个精典例子与代码

    学习C#静态函数及变量的一个精典例子与代码...
    2007-03-03
  • C#实现获取设置IP地址小工具

    C#实现获取设置IP地址小工具

    c# 开发,方便更改IP地址。由于公司和家里的ip设置不一样,公司要求手动设置,在家可以自动获取IP,切都是无线网络,为了方便操作,故做了这个小工具!
    2015-06-06
  • C# IFF图形结构解析代码

    C# IFF图形结构解析代码

    这个结构有点像RIFF文件。。是分段的。但要注意ANNO这个描述字段 必须是使用2个字节 否则ACDSEE无法识别。
    2010-03-03
  • C# WPF ListView控件的实例详解

    C# WPF ListView控件的实例详解

    这篇文章主要介绍了C# WPF ListView控件的实例详解的相关资料,希望通过本能帮助到大家,让大家掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • C#类的访问修饰符用法分析

    C#类的访问修饰符用法分析

    这篇文章主要介绍了C#类的访问修饰符用法,较为详细的分析了C#类的访问修饰符概念与用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-10-10

最新评论