.Net消息队列的使用
版权声明:作者:真爱无限 出处:http://blog.csdn.net/pukuimin1226 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
.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<MsgModel>();
- 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 + "<br/>");
- }
- 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}<br/>", message.Label, message.Body.ToString(), DateTime.Now));
- }
- }
- else
- {
- Response.Write("没有消息了!<br/>");
- }
- }
- 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+"<br/>");
- }
- 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}<br/>", message.Label, msg, DateTime.Now));
- }
- }
- else
- {
- Response.Write("没有消息了!<br/>");
- }
- }
- private T receiveComplexMsg<T>()
- {
- 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);
- }
- /// <summary>
- /// 创建消息队列
- /// </summary>
- /// <param name="name">消息队列名称</param>
- /// <returns></returns>
- 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("创建成功!<br/>");
- }
- else
- {
- //System.Messaging.MessageQueue.Delete(".\\private$\\" + name);//删除一个消息队列
- Response.Write("已经存在<br/>");
- }
- }
- }
- [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);
- }
- }
- }
.Net消息队列的使用的更多相关文章
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- 消息队列 Kafka 的基本知识及 .NET Core 客户端
前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...
- .net 分布式架构之业务消息队列
开源QQ群: .net 开源基础服务 238543768 开源地址: http://git.oschina.net/chejiangyi/Dyd.BusinessMQ ## 业务消息队列 ##业务消 ...
- 【原创经验分享】WCF之消息队列
最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...
- Java消息队列--ActiveMq 实战
1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...
- Java消息队列--JMS概述
1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...
- 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)
Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...
- Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇
目前业界流行的分布式消息队列系统(或者可以叫做消息中间件)种类繁多,比如,基于Erlang的RabbitMQ.基于Java的ActiveMQ/Apache Kafka.基于C/C++的ZeroMQ等等 ...
- Netty构建分布式消息队列实现原理浅析
在本人的上一篇博客文章:Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇 中,重点向大家介绍了AvatarMQ主要构成模块以及目前存在的优缺点.最后以一个生产者.消费者传递消息的例子, ...
- C#分布式消息队列 EQueue 2.0 发布啦
前言 最近花了我几个月的业余时间,对EQueue做了一个重大的改造,消息持久化采用本地写文件的方式.到现在为止,总算完成了,所以第一时间写文章分享给大家这段时间我所积累的一些成果. EQueue开源地 ...
随机推荐
- Android first---xml文件生成与解析
一.使用append进行xml生成 Message类属性:private String body; private String date; private String a ...
- 【jQuery】【转】jQuery中filter()和find()的区别
Precondition: 现在有一个页面,里面HTML代码为: <div class="css"> <p class="rain">测 ...
- JavaScript数组类型
特点 动态长度 一个数组里面的元素可以是不同类型 数组的length属性不是只读属性,可通过length延长数组也可以删减数组的长度 定义数组两种方法 //方法一: var names = new A ...
- Ember.js 的视图层
本指导会详尽阐述 Ember.js 视图层的细节.为想成为熟练 Ember 开发者准备,且包 含了对于入门 Ember 不必要的细节. Ember.js 有一套复杂的用于创建.管理并渲染连接到浏览器 ...
- Media Player插件
<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" ...
- go并发3
Go语言并发的设计模式和应用场景 以下设计模式和应用场景来自Google IO上的关于Goroutine的PPT:https://talks.golang.org/2012/concurrency.s ...
- windbg运行
运行起来会提示windbg is running. BUSY 这个是正常运行的状态,只有发生异常,或者被指定断点,才会中断.
- JDBC与Hibernate中SQL语句参数设置的顺序问题
JDBC中:设置从1开始 例: Connection con = DriverManager.getConnection("jdbc:mysql://localhost/...", ...
- Python正则化学习
- mac下安装nginx+php+mysql+xdebug
一,安装homebrew 就像linux下面有yum一样,mac也有个homebrew,管理软件非常便捷. 官网:http://brew.sh/index_zh-cn.html 上面有句命令,复制下来 ...