MSMQ
多个不同的应用之间实现相互通信的一种异步传输模式
MSMQ(创建)
- 程序和功能
- 启用或者关闭windows功能
- 选择microsoft消息队列服务器核心
- 勾选下载安装
- 我的计算机 >>>右键>>> 管理 就会有一个消息队列
- 添加一个专有队列(注意:虽然真实显示不区分大小写,但是真实路径是需要区分的)
- 在队列消息中可以看到未被取出的数据
MSMQ(C#用法)
向队列中写入消息
- 要注意的点就是路径中的大小写
- 消息使用Message类来传递
/// <summary>
/// 写入消息队列
/// </summary>
/// <param name="Msname">队列名称</param>
/// <param name="Message">队列消息</param>
public static void sendMessage(string Msname,string MessageStr)
{
//消息队列名
string path = string.Format(@".\private$\{0}", Msname);
//判断队列是否存在
if (!MessageQueue.Exists(path))
{
MessageQueue.Create(path);
}
MessageQueue queue = new MessageQueue(path);
Message message = new Message();
message.Body = MessageStr;
message.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
queue.Send(message);
}
获取队列中的消息
- Receive() 这种方式取数据,取出的数据在队列中会进行删除。
- Peek() 取出数据队列中不进行删除。(进行预览)
/// <summary>
/// 获取队列消息
/// </summary>
/// <param name="path">队列路径</param>
public static string GetQueryMessage(string path)
{
MessageQueue queue = new MessageQueue(path);
System.Messaging.Message msg = queue.Receive();
msg.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
return msg.Body.ToString();
}
获取队列中正在排队数
- 当然如果要获取所有的消息 可以使用GetAllMessages(),它所返回的是Message数组类型,遍历输出。
/// <summary>
/// 获取队列排队消息数量
/// </summary>
/// <param name="path">队列路径</param>
public static int GetQueryMessageCount(string path)
{
MessageQueue queue = new MessageQueue(path);
int count = queue.GetAllMessages().Length;
return count;
}