ASP.NET中进行消息处理(MSMQ) 三
2011-11-17 13:27
323 查看
摘抄自:/article/4658417.html
在本文的前两篇文章里对MSMQ的相关知识点进行了介绍,很多阅读过这前两篇文章的朋友都曾问到过这样一些问题: 1、如何把MSMQ应用到实际的项目中去呢? 2、可不可以介绍一个实际的应用实例? 3、......
在前两篇文章里,关于MSMQ常用的技术点基本介绍完毕了,本文主要以MS开源项目PetShop中的MSMQ应用作为案例来介绍MSMQ在实际项目中的应用。在PetShop里,由于系统使用了多线程的专用应用程序来监控消息队列,在进入PetShop应用分析前,我们先来了解下关于多线程和MSMQ的相关知识点。
一、多线程和MSMQ 现在有这样一个需求,指定的消息队列里不管有无消息数据,我们通过一个多线程来监控这个队列,一但队列里的数据发生变化就做出相应的处理,比如把消息读取出来。根据这个需求,我们来做个示例,用一多线程把队列监控起来,如果队列里有消息数据,就把消息读取出来,如果没有则一直监视队列,当队列数据发生改变(有新的消息加入)的时候就作出处理(读取消息)。
我们把需要启动的线程装载入ThreadArray数组,通过一个遍历数组把所以的线程启动,实际这里只有5个线程。
如果上面这段代码阅读起存在问题,建议先去了解下多线程的相关知识点。在StartThreads方法里启动数组里存储的所以线程,并委托给MSMQListen方法进行处理,MSMQListen方法完成的就是读取队列里的消息,这里我使用了在第二篇文章里所使用的MsgQueue类和Book类,详细请阅读第二篇文章ASP.NET中进行消息处理(MSMQ) 二 。
启动了5个线程,用来监视指定的消息队列,如上图。那好,我们现在就来测试一下,通过给队列里发送消息,看线程是否会有响应。从上面启动线程的代码上可以很清晰的看出,只要队列里有消息在多线程的监视下,线程就会把队列里的消息读取出来。
发送消息:
记住在窗体关闭时候,一定要释放信息队列资源,要不线程是未终止的:
在本文的前两篇文章里对MSMQ的相关知识点进行了介绍,很多阅读过这前两篇文章的朋友都曾问到过这样一些问题: 1、如何把MSMQ应用到实际的项目中去呢? 2、可不可以介绍一个实际的应用实例? 3、......
在前两篇文章里,关于MSMQ常用的技术点基本介绍完毕了,本文主要以MS开源项目PetShop中的MSMQ应用作为案例来介绍MSMQ在实际项目中的应用。在PetShop里,由于系统使用了多线程的专用应用程序来监控消息队列,在进入PetShop应用分析前,我们先来了解下关于多线程和MSMQ的相关知识点。
一、多线程和MSMQ 现在有这样一个需求,指定的消息队列里不管有无消息数据,我们通过一个多线程来监控这个队列,一但队列里的数据发生变化就做出相应的处理,比如把消息读取出来。根据这个需求,我们来做个示例,用一多线程把队列监控起来,如果队列里有消息数据,就把消息读取出来,如果没有则一直监视队列,当队列数据发生改变(有新的消息加入)的时候就作出处理(读取消息)。
public static int threadNumber = 5;//5个线程 public static Thread[] ThreadArray = new Thread[threadNumber];
我们把需要启动的线程装载入ThreadArray数组,通过一个遍历数组把所以的线程启动,实际这里只有5个线程。
private void StartThreads() { for (int conter = 0; conter < threadNumber; conter++) { ThreadArray[conter] = new Thread(new ThreadStart(listMessage)); ThreadArray[conter].Name = conter.ToString(); ThreadArray[conter].Start(); richTextBox1.Text += conter.ToString() + "线程已经运行</br>"; } } //开始监听 private void listent_Click(object sender, EventArgs e) { StartThreads(); } //停止监听 private void stop_Click(object sender, EventArgs e) { for (int conter = 0; conter < threadNumber; conter++) { ThreadArray[conter].Abort(); richTextBox2.Text += conter.ToString() + "线程已经停止</br>"; } } private void listMessage() { while (true) { //取出队列里的消息 MessageBox.Show(MSMQManger.ReceiverMessage()); } }
如果上面这段代码阅读起存在问题,建议先去了解下多线程的相关知识点。在StartThreads方法里启动数组里存储的所以线程,并委托给MSMQListen方法进行处理,MSMQListen方法完成的就是读取队列里的消息,这里我使用了在第二篇文章里所使用的MsgQueue类和Book类,详细请阅读第二篇文章ASP.NET中进行消息处理(MSMQ) 二 。
启动了5个线程,用来监视指定的消息队列,如上图。那好,我们现在就来测试一下,通过给队列里发送消息,看线程是否会有响应。从上面启动线程的代码上可以很清晰的看出,只要队列里有消息在多线程的监视下,线程就会把队列里的消息读取出来。
发送消息:
private void button3_Click(object sender, EventArgs e) { MSMQManger.SendQueue("标题", "我是发送的信息"); }
记住在窗体关闭时候,一定要释放信息队列资源,要不线程是未终止的:
///<summary> /// 删除消息队列 ///</summary> public static void CloseAllMessage() { //连接到本地队列 MessageQueue.Delete(@".\private$\myQueue"); }
相关文章推荐
- ASP.NET中进行消息处理(MSMQ)二
- ASP.NET中进行消息处理(MSMQ) 一
- ASP.NET中进行消息处理(MSMQ) 二
- ASP.NET中进行消息处理(MSMQ)
- ASP.NET中进行消息处理(MSMQ) 二
- ASP.NET中进行消息处理(MSMQ) 三
- ASP.NET中使用MSMQ进行消息处理系列文章
- ASP.NET中进行消息处理(MSMQ) 二
- ASP.NET中进行消息处理(MSMQ)
- 转--ASP.NET中进行消息处理(MSMQ) 二
- ASP.NET中进行消息处理(MSMQ)
- ASP.NET中进行消息处理(MSMQ) 一
- ASP.NET中进行消息处理(MSMQ) 一
- ASP.NET中进行消息处理(MSMQ) 三
- ASP.NET中进行消息处理(MSMQ)
- 转--ASP.NET中进行消息处理(MSMQ) 三
- ASP.NET中进行消息处理(MSMQ)
- ASP.NET中进行消息处理(MSMQ)
- ASP.NET中进行消息处理(MSMQ) 一
- ASP.NET中进行消息处理(MSMQ) 二