win 2012网站建设,免费帮忙做网站,wordpress评论通知代码6,wordpress免费模板小而美首先说一下#xff0c;消息队列 (MSMQ Microsoft Message Queuing)是MS提供的服务#xff0c;也就是Windows操作系统的功能#xff0c;并不是.Net提供的。消息队列#xff08;MSMQ#xff09;技术使得运行于不同时间的应用程序能够在各种各样的网络和可能暂时脱机的系统之… 首先说一下消息队列 (MSMQ Microsoft Message Queuing)是MS提供的服务也就是Windows操作系统的功能并不是.Net提供的。消息队列MSMQ技术使得运行于不同时间的应用程序能够在各种各样的网络和可能暂时脱机的系统之间进行通信。应用程序将消息发送到队列并从队列中读取消息。下图演示了消息队列如何保存由多个发送应用程序生成的消息并被多个接收应用程序读取。消息一旦发送到队列中便会一直存在即使发送的应用程序已经关闭。 MSMQ服务默认是关闭的(Window7及以上操作系统)按以下方式打开1、打开运行输入OptionalFeatures钩上Microsoft Message Queue(MSMQ)服务器。消息队列Message Queue是一种使用队列Queue作为底层存储数据结构可以用于解决不同进程与应用程序之间通讯的分布式消息容器也可以称为消息中间件。目前比较常用的消息队列有ActiveMQ、RabbitMQ、MSMQ Kafka、RocketMQ、Redis等。消息队列和队列有什么区别呢唯一的区别在于入队列的时候称为生产者出队列的时候称为消费者。我理解的MSMQ MSMQ可以被看成一个数据储存装置就如同数据库只不过数据存储的是一条一条的记录而MSMQ存储的是一个一个的消息(messsge)。Message可以被理解为一种数据容器我们在稍后会讲到。MSMQ一个重要的应用场景就是离线信息交互例如我们在给朋友发送邮件而此时朋友并未登入邮箱这个时候我们的邮件就可以发到邮件服务器的MSMQ队列中当朋友登入邮箱的时候系统在从服务器的MSMQ队列中取出U件。当然MSMQ的用途远不止这些例如充当数据缓存实现异步操作等等这里就不在一一举例了。系统的消息队列为我们提供了3种队列传出队列专用队列和系统队列而用户能自由创建的只有专用队列。我们可以尝试创建一个专用队列右击专用队列再点击新建得到新增界面如下图。由于我们创建的是专用队列所以在队列命名上面显示的添加private$,另一个事务复选框表示我们要创建的是队列是否为事务队列这个在稍后我会详细的解释 我在专用队列里面添加一个叫shaoshun的专用队列在专用队列文件夹下面就可以找到如图消息 消息是MSMQ的存储对象封装为System.Messaging.Message对象它由一个主体(body)和若干属性构成其中我们的用户数据通常被序列化装入body主体中这也是我们称它为数据容器的原因。除了body属性还有几个属性相对来说比较重要Priority(消息的优先级)Label(用户定义的消息标识)Formatter(消息的序列组件当用户将复杂类型数据填充到body中用户的数据会先被序列化)队列 在前面我们通过手动创建了一个专用队列。我们知道队列分事务性队列和非事务性队列默认创建的是非事务性队列。当我们勾选事务性复选框我们就会创建事务性队列那么什么是事务性队列呢?事务性队列将消息保存在磁盘上实现了持久化也就是说当我们关机断电后下次再启动机器我们的消息依然保存在队列里面而非事务性队列则将消息保存在内存中也就是说我重启电脑后队列里面的消息将不存在了。 队列支持事务操作当我们把对多个消息的接收操作纳入一个事务中那么只要有一个消息接收不成功队列将抛弃前面接收的所有消息实现事务回滚。队列事务同时支持消息按顺序接收与发送。实例 需要先引用System.Messaging.dll#region 消息队列
using System;
using System.Collections.Generic;
using System.Linq;
using System.Messaging;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace test
{class Program{static void Main(string[] args){#region 创建消息队列 const string queueName .\Private$\jiyiqin;MessageQueue mq null;if (!MessageQueue.Exists(queueName))// 如果指定的路径queueName中不存在队列那么在该路径即queueName中创建一个消息队列。jiyiqin就是你想要创建消息队列的名字{mq MessageQueue.Create(queueName);//创建名称jiyiqin的消息队列的实例。Console.WriteLine(创建消息队列完成 queueName);}else //如果消息队列jiyiqin已经存在那么创建该消息队列的一个实例{mq new MessageQueue(queueName);//创建名称jiyiqin的消息队列的实例。}mq.SetPermissions(Administrator, MessageQueueAccessRights.FullControl);mq.SetPermissions(ANONYMOUS LOGON, MessageQueueAccessRights.FullControl);mq.SetPermissions(Everyone, MessageQueueAccessRights.FullControl);#endregion#region 发送消息队列string strTx 123我;Message msgTx new Message();msgTx.Body strTx;msgTx.Formatter new XmlMessageFormatter(new Type[] { typeof(string) });mq.Send(msgTx);#endregion#region 接收消息队列//接收到的消息对象Message msgRx mq.Receive();//指定格式化程序msgRx.Formatter new XmlMessageFormatter(new Type[] { typeof(string) });//接收到的内容string strRx msgRx.Body.ToString();System.Windows.Forms.MessageBox.Show(strRx);#endregion}}
}需加微信交流群的请加小编微信号zls20210502切记备注 加群小编将会第一时间邀请你进群目前①群已满 需要在②群排队等坑位