.net中使用MSMQ
2021-03-29 13:24
标签:开发 data- ola data 资源 ted end 简单的 win 学习微软的技术有点让人恼火的一个原因是,技术文档跨度太大。 有一个简单的例子,但是涉及到很多具体使用的细节,隐藏在大量文字文档中。 作为技术文档,似乎并不是为了给想学习的人使用的,开发者将所有有关该技术的内容,一股脑的堆叠起来。 了解到MSMQ可以用作windows上的进程间通信,所以想了解应该如何使用。 使用上,关心的可能依次是如下几个问题 最关心的,一般其实就是前两个了 初见微软的文档例子,看到创建指定的队列名称一头雾水,为什么名称要用".\\xxx"开头(如".\\myQueue\\Journal$"什么意思)?发送字符串如何接收? 搜索了不少资料,根据自己的理解整理以下。 MSMQ,对应c#的MessageQueue类,是在单独的System.Messaging.dll中的,一般在.net sdk相关目录中 该功能依赖windows的消息队列功能,需要在widows功能中先开启,因为默认是不开启的。 同时,该功能依赖的dll也不再默认dll中,添加引用时,可以从这里查找(注意版本可能不同): MSMQ不存在时,需要先创建,如果已经存在,则需要通过new来生成: 这里关键点在于,path是什么?看下表: Queue type Syntax Public queue MachineName\QueueName Private queue MachineName\Private$\QueueName Journal queue MachineName\QueueName\Journal$ Machine journal queue MachineName\Journal$ Machine dead-letter queue MachineName\Deadletter$ Machine transactional dead-letter queue MachineName\XactDeadletter$ 由于MSMQ是可以跨主机,远程调用,同时还有一些系统预定义的功能,这里直接使用的话深入了解很复杂。 但是最简单的,进程间通信功能,我了解到可以用Private queue,这种类型的消息队列,是在本机使用的,用于本机通信。 关于`MachineName`,对于本机,也可以直接用点`.`来代替,于是,一个最简单的队列名可以是: 由于我使用上,是通过JSON做消息格式,序列化成字符串通信就可以了。 最简单的,看到了MSMQ的Send()和Receive()接口,于是很容易想到: //接收端 然而实际运行时,接收端总是报错不识别。 搜索了一些例子,才了解到,需要制定默认使用的格式化器,否则内容无法识别。 具体做法是: //接收端 发送端必须指定格式化Formatter,而接收端根据我的测试,并不需要,默认的就是Xml的formatter。 至此基本的收发到此为止。 有几点需要注意 .net中使用MSMQ 标签:开发 data- ola data 资源 ted end 简单的 win 原文地址:https://www.cnblogs.com/mosakashaka/p/12608031.html
准备
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client\System.Messaging.dll
初始化
if (!MessageQueue.Exists(path))
{
msgq = MessageQueue.Create(path);
}
else
{
msgq = new MessageQueue(path);
}
@".\Private$\MyQueue"
读写
//发送端:
Message msg = new Message();
msg.Body = stringContent;
queue.Send(msg);
var message = queue.Receive();
return (string)message.Body;//发送端:
Message msg = new Message();
msg.Body = stringContent;
msg.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });//注意这句!!
queue.Send(msg);
var message = queue.Receive();
return (string)message.Body;其他
上一篇:LVS NET部署
下一篇:Log4Net 发布后不能用