消息队列:MessageQueue
windows相当强悍的一个东东,具体能用来做什么,这里不啰嗦了,只贴实现的代码了,哈哈。
[c-sharp] view plain copy
using System; using System.Messaging; /// <summary> /// 消息队列 /// </summary> public class Queue : IDisposable { protected MessageQueue queue; protected TimeSpan timeout; protected MessageQueueTransactionType msmqTranType = MessageQueueTransactionType.Automatic; /// <summary> /// 生成消息队列的实例对象 /// </summary> /// <param name="path">消息队列路径</param> /// <param name="timeoutSeconds">接收消息的超时时间,以"秒"为单位</param> public Queue( string path, int timeoutSeconds) { //下面代码可以自动创建消息队列,无需在服务器上事先存在消息队列。 //if (!MessageQueue.Exists(path)) //{ // queue = MessageQueue.Create(path); //} //else //{ // queue = new MessageQueue(path); //} queue = new MessageQueue(path); timeout = TimeSpan.FromSeconds(Convert.ToDouble(timeoutSeconds)); queue.DefaultPropertiesToSend.AcknowledgeType = AcknowledgeTypes.None; queue.DefaultPropertiesToSend.AttachSenderId = false ; queue.DefaultPropertiesToSend.Priority = MessagePriority.High; queue.DefaultPropertiesToSend.Recoverable = true ; queue.DefaultPropertiesToSend.UseAuthentication = false ; queue.DefaultPropertiesToSend.UseDeadLetterQueue = true ; queue.DefaultPropertiesToSend.UseEncryption = false ; queue.DefaultPropertiesToSend.UseJournalQueue = false ; queue.DefaultPropertiesToSend.UseTracing = false ; } /// <summary> /// 发送消息 /// </summary> /// <param name="message"></param> protected virtual void Send( object message) { queue.Send(message, msmqTranType); } /// <summary> /// 接收消息 /// </summary> /// <returns></returns> protected virtual object Receive() { try { using (Message msg = queue.Receive(timeout, msmqTranType)) { return msg; } } catch (MessageQueueException ex) { if (ex.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout) { throw new TimeoutException(); } throw ex; } } /// <summary> /// 释放资源 /// </summary> public void Dispose() { queue.Dispose(); } }
下面啰嗦哈消息队列的路径配置的问题(即 上面的类中的path参数):偷了个懒,哈哈
举个简单的例子来说明哈吧:
[c-sharp] view plain copy
//本机消息队列 /*公共队列,消息队列名为myQueue*/ ./myQueue /*专用队列,消息队列名为myQueue*/ ./ private $/myQueue /*Format格式,计算机名为zhang,消息队列名为myQueue*/ FormatName:DIRECT=OS:zhang/Private$/myQueue //远程消息队列 /*配置为Ip为192.168.101.130的服务器的专用消息队列,队列名为myQueue*/ FormatName:DIRECT=TCP:192.168.101.130/Private$/myQueue
OK,下面的小demo来测试哈我们的消息队列是否可用:
[c-sharp] view plain copy
class Order { public string Id { get ; set ; } public DateTime Time { get ; set ; } } class Program { string path= "FormatName:DIRECT=OS:zhang/Private$/myQueue" ; //队列路径 int timeout=20; //超时时间 Queue mq = new Queue(path,timeout); //生成消息队列对象 static void Main( string [] args) { Program p = new Program(); p.SendQueue(); p.Recive(); } void SendQueue() { Order o = new Order { Id = "123456" , Time = DateTime.Now }; mq.Send(o, MessageQueueTransactionType.Automatic); } void Recive() { Message m = mq.Receive(); Order o = (Order)m.Body; Console.WriteLine(o.Id); } }
注:myQueue消息队列必须事先存在,具体的创建过程如下:
1、安装消息队列,这是windows组件,可在组件安装中找到,如图,本人系统为windows7,其他版本的安装可能会有些区别:
2、启用服务:
无法安装或无法启动该服务的,可以google一哈,该服务要依赖于其他的某些服务,这里不啰嗦了。
3、创建消息队列:
计算机->管理->服务和应用程序->消息队列
还是看图吧:
4、OK,准备工作完成,可以运行测试了,HOHO
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于消息队列:MessageQueue的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did49481