热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

不好_.Net消息队列的使用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了.Net消息队列的使用相关的知识,希望对你有一定的参考价值。.Net使用消息队列,借助windows组件来

篇首语:本文由编程笔记#小编为大家整理,主要介绍了.Net消息队列的使用相关的知识,希望对你有一定的参考价值。


.Net使用消息队列,借助windows组件来存储要完成的一系列任务,不用程序使用同一个队列,方便不同程序之间的数据共享和协作……

以本人经验,这个在某个方面类似于session(当然还有很多方面不同),相同之处:session可以把信息存储在aspnet_state服务中,网站重新编译或者重新启动网站,session不会丢失(session超时是正常情况,这种情况除外)。


win7中安装消息队列组件,其他操作系统请百度搜索相关资料。

如果服务没有自动启动,需要启动服务:




先创建队列,再使用队列,队列中的消息,发送一个多一个,接收一个少一个,先进先出。



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Messaging;
//添加物理文件 System.Messaging 的引用
namespace testweb
public partial class MSMQtest : System.Web.UI.Page

protected void Page_Load(object sender, EventArgs e)

//CreateNewQueue("MsgQueue");//创建一个消息队列
//sendSimpleMsg();//每一个队列最好只发送和接收同一种格式的信息,不然不好转换格式。
//receiveSimpleMsg();//
//receiveSimpleMsg();
//sendComplexMsg();
//receiveComplexMsg();
MsgModel m = receiveComplexMsg();
Response.Write(m.ToString());


private void sendSimpleMsg()

//实例化MessageQueue,并指向现有的一个名称为VideoQueue队列
MessageQueue MQ = new MessageQueue(@".\\private$\\MsgQueue");
//MQ.Send("消息测试", "测试消息");
System.Messaging.Message message = new System.Messaging.Message();
message.Label = "消息lable";
message.Body = "消息body";
MQ.Send(message);
Response.Write("成功发送消息," + DateTime.Now + "
");

private void receiveSimpleMsg()

MessageQueue MQ = new MessageQueue(@".\\private$\\MsgQueue");
//调用MessageQueue的Receive方法接收消息
if (MQ.GetAllMessages().Length > 0)

System.Messaging.Message message = MQ.Receive(TimeSpan.FromSeconds(5));
if (message != null)

//message.Formatter = new System.Messaging.XmlMessageFormatter(new string[] "Message.Bussiness.VideoPath,Message" );//消息类型转换
message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] typeof(string) );
Response.Write(string.Format("接收消息成功,lable:0,body:1,2
", message.Label, message.Body.ToString(), DateTime.Now));


else

Response.Write("没有消息了!
");


private void sendComplexMsg()

//实例化MessageQueue,并指向现有的一个名称为VideoQueue队列
MessageQueue MQ = new MessageQueue(@".\\private$\\MsgQueue");
//MQ.Send("消息测试", "测试消息");
System.Messaging.Message message = new System.Messaging.Message();
message.Label = "复杂消息lable";
message.Body = new MsgModel("1", "消息1");
MQ.Send(message);
Response.Write("成功发送消息,"+DateTime.Now+"
");

private void receiveComplexMsg()

MessageQueue MQ = new MessageQueue(@".\\private$\\MsgQueue");
//调用MessageQueue的Receive方法接收消息
if (MQ.GetAllMessages().Length > 0)

System.Messaging.Message message = MQ.Receive(TimeSpan.FromSeconds(5));
if (message != null)

message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] typeof(MsgModel) );//消息类型转换
MsgModel msg = (MsgModel)message.Body;
Response.Write(string.Format("接收消息成功,lable:0,body:1,2
", message.Label, msg, DateTime.Now));


else

Response.Write("没有消息了!
");


private T receiveComplexMsg()

MessageQueue MQ = new MessageQueue(@".\\private$\\MsgQueue");
//调用MessageQueue的Receive方法接收消息
if (MQ.GetAllMessages().Length > 0)

System.Messaging.Message message = MQ.Receive(TimeSpan.FromSeconds(5));
if (message != null)

message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] typeof(T) );//消息类型转换
T msg = (T)message.Body;
return msg;


return default(T);

///


/// 创建消息队列
///

/// 消息队列名称
///
public void CreateNewQueue(string name)

if (!System.Messaging.MessageQueue.Exists(".\\\\private$\\\\" + name))//检查是否已经存在同名的消息队列


System.Messaging.MessageQueue mq = System.Messaging.MessageQueue.Create(".\\\\private$\\\\" + name);
mq.Label = "private$\\\\"+name;
Response.Write("创建成功!
");

else

//System.Messaging.MessageQueue.Delete(".\\\\private$\\\\" + name);//删除一个消息队列
Response.Write("已经存在
");



[Serializable]
public class MsgModel

public string id get; set;
public string Name get; set;
public MsgModel()
public MsgModel(string _id, string _Name)

id = _id;
Name = _Name;

public override string ToString()

if (string.IsNullOrEmpty(id) || string.IsNullOrEmpty(Name)) return "";
return string.Format("id--0,Name--1",id,Name);









推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 五、RabbitMQ Java Client基本使用详解
    JavaClient的5.x版本系列需要JDK8,用于编译和运行。在Android上,仅支持Android7.0或更高版本。4.x版本系列支持7.0之前 ... [详细]
author-avatar
一坛苦水_179
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有