热门标签 | 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);









推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
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社区 版权所有