asp.net 消息队列
asp.net 消息队列一、什么是MSMQ消息队列
MSMQ(Microsoft Message Queue),微软消息队列,用于应用程序之间相互通信的一种异步传输模式。应用程序可以分布在同台机器上,也可以分布于互联的网络中的任意位置。基本原理:消息发送者把要发送的消息放入容器,也就是Message(消息),然后保存到系统公用空间的消息队列中(Message Queue)中,本地或互联位置上的消息接收程序再从队列中取出发给它的消息进行处理。消息类型可以是文本,图像,自定义对象等。消息队列分为公共队列和私有队列。
二、使用消息队列的特点
1、消息队列提供了一种异步消息传递机制。
2、用于进程间的通信。A进程把消息放进消息队列,B进程去消息队列获取,属于异步通信。
3、用于WEB并发请求时作缓冲排队写入。当多个请求并发插入数据库时可能会造成服务器不可用,用户等待时间过长 ,这时可以把所有请求全部放到消息队列中,然后监视进程按先进先出顺序依次写入数据库。
4、由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代码,因而大大地提高了事物处理的能力;
5、当信息传送过程中,信息发送机制具有一定功能的故障恢复能力;
6、MSMQ的消息传递机制使得消息通信的双方具有不同的物理平台成为可能。
三、MSMQ的安装
使用MSMQ进行软件开发需要安装MSMQ,安装完后就该进入实际的开发阶段。
win7中通过 控制面板 >> 程序和功能 >> 打开或关闭 windows 功能 进行安装
四、MSMQ服务启动
如果服务没有自动启动,需要启动服务
五、MessageQueue类的介绍
该类位于名称空间System.Messageing下。其中有几个常用的方法必须掌握
1、Create方法:创建使用指定路径的新消息队列。
2、Delete方法:删除现有的消息队列。
3、Existe方法:查看指定消息队列是否存在。
4、GetAllMessages()方法:得到队列中的所有消息。
5、GetPublicQueues方法:在“消息队列”网络中定位消息队列。
6、Peek/BeginPeek方法:查看某个特定队列中的消息队列,但不从该队列中移出消息。
7、Receive/BeginReceive方法:检索指定消息队列中最前面的消息并将其从该队列中移除。
8、Send方法:发送消息到指定的消息队列。
9、Purge方法:清空指定队列的消息。
六、asp.net 消息队列实例(基本类型消息)
//// <summary>
/// 通过Create方法创建使用指定路径的新消息队列
/// </summary>
/// <param name="queuePath"></param>
public static void Createqueue(string queuePath)
{
try
{
if (!MessageQueue.Exists(queuePath))
{
MessageQueue.Create(@".\\private$\\myQueue");
}
else
{
Console.WriteLine(queuePath + "已经存在!");
}
}
catch (MessageQueueException e)
{
Console.WriteLine(e.Message);
}
}
2、连接消息队列并发送消息到队列
//// <summary>
/// 连接消息队列并发送消息到队列
/// </summary>
public static void SendMessage()
{
try
{
//连接到本地的队列
MessageQueue myQueue = new MessageQueue(".\\\\private$\\\\myQueue");
Message myMessage = new Message();
myMessage.Body = "消息内容";
myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
//发送消息到队列中
myQueue.Send(myMessage);
}
catch (ArgumentException e)
{
Console.WriteLine(e.Message);
}
}
3、连接消息队列并从消息队列中接收消息
//// <summary>
/// 连接消息队列并从队列中接收消息
/// </summary>
public static void ReceiveMessage()
{
//连接到本地队列
MessageQueue myQueue = new MessageQueue(".\\\\private$\\\\myQueue");
myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
try
{
//从队列中接收消息
Message myMessage = myQueue.Receive();
string context = (string)myMessage.Body; //获取消息的内容
Console.WriteLine("消息内容为:" + context);
}
catch (MessageQueueException e)
{
Console.WriteLine(e.Message);
}
catch (InvalidCastException e)
{
Console.WriteLine(e.Message);
}
}
4、连接队列并清空队列的全部消息
//// <summary>
/// 清空指定队列的消息
/// </summary>
public static void ClearMessage()
{
MessageQueue myQueue = new MessageQueue(".\\\\private$\\\\myQueue");
myQueue.Purge();
}
5、连接队列并获取队列的全部消息
//// <summary>
/// 连接队列并获取队列的全部消息
/// </summary>
public static void GetAllMessage()
{
//连接到本地队列
MessageQueue myQueue = new MessageQueue(".\\\\private$\\\\myQueue");
Message[] message = myQueue.GetAllMessages();
XmlMessageFormatter formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
for (int i = 0; i < message.Length; i++)
{
message[i].Formatter = formatter;
Console.WriteLine(message[i].Body.ToString());
}
}
七、asp.net 消息队列实例(自定义对象消息)
public class Book
{
private int _BookId;
public int BookId
{
get { return _BookId; }
set { _BookId = value; }
}
private string _BookName;
public string BookName
{
get { return _BookName; }
set { _BookName = value; }
}
}
public class MsgQueue
标签: