消息队列的使用

 

换了新公司,有了新的开始。

现在开始用消息队列,做邮件的异步发送。

本系统,通过webservice访问本地消息队列,没有用wcf的消息队列访问,也没有用公共队列。

不过由于有webservice的支持,访问本地消息队列,没有任何的问题。

以下为队列操作代码

 

  ///   <summary>
    
///  队列操作类
    
///   </summary>
    public    class  OperateQueue:Interface.IStore
    {
       
///   <summary>
       
///  建立队列
       
///   </summary>
       
///   <param name="queueName"> 队列名称 </param>
       
///   <returns> 是否成功 </returns>
        private   ResultInfo < bool >  CreateQueue( string  queueName)
       {
           ResultInfo
< bool >  result  =   new  ResultInfo < bool > ();
           result.Data 
=   false ;
           result.Result 
=   false ;

           
try
           {
              MessageQueue.Create(queueName, 
true );
              result.Data 
=   true ;
              result.Result 
=   true ;
           }
           
catch (Exception ex)
           {
               
throw  ex;
           }

           
return  result;
       }

       
///   <summary>
       
///  判断队列是否存在
       
///   </summary>
       
///   <param name="queueName"> 队列名字 </param>
       
///   <returns></returns>
        private    bool  IsQueueExists( string  queueName)
       {
           
return  MessageQueue.Exists(queueName);
       }

       
///   <summary>
       
///  发送消息
       
///   </summary>
       
///   <param name="queueName"> 队列名称 </param>
       
///   <returns> 是否成功 </returns>
        public  ResultInfo < bool >  StoreMessage( string  queueName,  string  message)
       {
           
if  ( ! this .IsQueueExists(queueName))
           {
               
this .CreateQueue(queueName);
           }

           MessageQueue queue 
=   new  MessageQueue() ;
           ResultInfo
< bool >  result  =   new  ResultInfo < bool > ();
           result.Data 
=   false ;
           result.Result 
=   false ;

           MessageQueueTransaction mts 
=   new  MessageQueueTransaction();
           
           
try
           {
               mts.Begin();

               queue
=   new  MessageQueue(queueName);

               queue.Send(message,mts);

               result.Data 
=   true ;
               result.Message 
=   " 消息存储成功 " ;
               result.Result 
=   true ;

               mts.Commit();
           }
           
catch  (Exception ex)
           {
               mts.Abort();
               
throw  ex;
           }
           
finally
           {
               queue.Close();
               queue.Dispose();
           }

           
return  result;
       }

       
///   <summary>
       
///  读取消息
       
///   </summary>
       
///   <param name="queueName"> 队列名称 </param>
       
///   <returns> 读取到的消息 </returns>
        public   ResultInfo < string >  ReadMessage( string  queueName)
       {
           ResultInfo
< string >  result  =   new  ResultInfo < string > ();
           result.Data 
=   string .Empty;
           result.Result 
=   false ;

           MessageQueue queue 
=   new  MessageQueue();

           
try
           {
               queue 
=   new  MessageQueue(queueName);
               Message message 
=   new  Message();
               
               message 
=  queue.Receive();
               message.Formatter 
=   new  System.Messaging.XmlMessageFormatter( new  Type[] {  typeof ( string ) });

               result.Data 
=  message.Body.ToString();
               result.Result 
=   true ;
           }
           
catch (Exception ex)
           {
               result.Message 
=  ex.Message;   
           }
           
finally
           {
               queue.Close();
               queue.Dispose();
           }

           
return  result;
       }
    }

 

采用了队列的事务操作,istore用来与上层调用进行隔离,这样做是为了保证,当需要使用其它消息队列时,做到最小改动。

webservice和队列部署在同一台服务器上,本打算利用

  System.Messaging.MessageQueue queue = new System.Messaging.MessageQueue(@"FormatName:DIRECT=tcp:192.168.16.85\private$\Action");

去进行局域网内的访问,但是没有成功,所以暂时放弃。

转载于:https://www.cnblogs.com/chenleinet/archive/2011/07/19/2110587.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值