MSMQ(MicroSoft Message Queue,微软消息队列)在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。其工作原理是:消息发送方将消息放进消息队列,接收方则从消息队列中取出消息。
用C#实现发送消息的代码如下:
(需要引用并包含命名空间System.Messaging)
// 消息的编码格式
XmlMessageFormatter msgFormatter = new XmlMessageFormatter( new Type[]{typeof(string)} );
// 创建消息
Message msg = new Message(message, msgFormatter);
// 发送消息
mq.Send(msg);
}
实现接收消息的代码如下:
// 接收消息(如果队列中没有消息,则该函数一直处于阻塞状态。)
Message msg = mq.Receive();
// 设置消息的解码格式(必须与发送方的编码格式一致)
msg.Formatter = new XmlMessageFormatter( new Type[]{typeof(string)} );
// 将消息转换为string格式并返回
return Convert.ToString(msg.Body);
}
在获取消息队列 MessageQueue 时,除了可以使用机器名和IP外,还可以使用消息队列的 Guid 和 SPX,或者使用标签。
引用 |
语法 |
示例 |
---|---|---|
格式名 |
FormatName: [ format name ] |
FormatName:Public= 5A5F7535-AE9A-41d4-935C-845C2AFF7112 FormatName:DIRECT=SPX: NetworkNumber ; HostNumber /QueueName FormatName:DIRECT=TCP: IPAddress /QueueName FormatName:DIRECT=OS: MachineName /QueueName |
标签 |
Label: [ label ] |
Label: TheLabel |
消息的编码格式除了 XmlMessageFormatter 外,还有ActiveXMessageFormatter 和 BinaryMessageFormatter,它们将消息编码为二进制格式。发送或接收 COM 组件时需要使用 ActiveXMessageFormatter。
另外,接收消息除了可以使用函数 Receive() 外,还可使用 Peek()。