前言
队列主要是有两部分接收和处理组成,简单来说你要处理的数据放到队列消息中进行排对处理这要有效的避免并发的发生。
这里我使用的是vs2019和本地环境进行搭建
打开vs 创建一个控制台(C#中使用消息队列需要添加新的引用System.Messaging)
执行控制台
static void Main(string[] args)
{
string MQUrl = ".\\private$\\MyMsg";//队列地址和名称。
string studentName = "测试MQ";//要上传的队列内容。
SendMsg(MQUrl, studentName);//将地址和数据传入到队列方法
}
private static void SendMsg(string mQPath, string studentName)
{
//先判断这个消息队列是否存在,如果存在则直接实例化对象,如果不存在则创建改消息队列
MessageQueue mq = (MessageQueue.Exists(mQPath)) ? (new MessageQueue(mQPath)) : (MessageQueue.Create(mQPath));
mq.Send(studentName); //将消息发送到消息队列
}
执行结束以后会在队列消息中查看到1一条信息
在建立一个控制台用来处理队列消息 (C#中使用消息队列需要添加新的引用System.Messaging)
这里展示了两种处理方式(同步----异步)
static void Main(string[] args)
{
string msgPath = ".\\Private$\\MyMsg"; //要读取的消息队列路径
ReceiveAsyn(msgPath);//异步处理数据方法
ReceiveSyn(msgPath);//同步处理数据方法
}
//异步读取
private static void ReceiveAsyn(string msgPath)
{
if (MessageQueue.Exists(msgPath))
{
MessageQueue mq = new MessageQueue(msgPath);
mq.ReceiveCompleted += new ReceiveCompletedEventHandler(ReceiveMethon);
mq.BeginReceive(MessageQueue.InfiniteTimeout);
Console.WriteLine("已接收数据 ");
}
}
static readonly XmlMessageFormatter A = new XmlMessageFormatter(new Type[] { typeof(String) }); //格式
private static void ReceiveMethon(object sender, ReceiveCompletedEventArgs e)
{
Message m = e.Message;
m.Formatter = A; //转换格式
Console.WriteLine(m.Body.ToString());
}
static readonly XmlMessageFormatter S = new XmlMessageFormatter(new Type[] { typeof(String) }); //格式
//同步读取
private static void ReceiveSyn(string msgPath)
{
if (MessageQueue.Exists(msgPath))
{
MessageQueue mq = new MessageQueue(msgPath);
Message m = mq.Receive();
m.Formatter = S; //格式转换
Console.WriteLine(m.Body.ToString());
Console.WriteLine("已接收数据 ");
}
}
执行成功后会发现队列消息已经处理了