阿宽

Nothing is more powerful than habit!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

MessageQueue学习总结

Posted on 2009-04-13 11:39  宽田  阅读(8664)  评论(1编辑  收藏  举报

具体的理论这里就不说了。主要说一下做的例子。本例子主要是发送不同的消息。然后根所ID得到指定的消息内容。

方法:

  1、在专用队列增加一个专用队列"Demo"。所有选项为默认即可。

  2、发送消息。输入消息的ID,输入消息的内容发送消息。

  3、输入被接收消息的ID,根据此ID找到消息后查看其内容。

消息ID设置方法:

  消息中没有ID这个选项。所以不知如何把消息发送给指定的人。后来找到了Label属性, 我将要发送的给某某人的ID设在此属性中来解决问题。  如果谁有更好的方法也请回贴告知我。

 

代码:

   第二步中发送按钮代码为:

         /// <summary>
        
/// 定义消息路径
        
/// </summary>
        public const string sMessageConnectionString = @".\Private$\Demo";
       

        
/// <summary>
        
/// 发送
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnSend_Click(object sender, EventArgs e)
        {
            
if (txbSend.Text.Trim() == "")
            {
                MessageBox.Show(
"请输入要发送的message!");
                txbSend.Focus();
                
return;
            }

            
//完整队列格式为:  计算机名\private$\队列名称 (专用队列)
            MessageQueue mqQue = new MessageQueue(txtQueue.Text.Trim());
            mqQue.MessageReadPropertyFilter.SetAll();

            System.Messaging.Message msg 
= new System.Messaging.Message();
            
//消息主体
            msg.Body = txbSend.Text.Trim() + " " + DateTime.Now.ToString();
            
//用描述设置ID
            msg.Label = txbMessageID.Text;
            
//将消息加入到发送队列
            msg.ResponseQueue = mqQue;
            msg.AttachSenderId 
= true;

            msg.Formatter 
= new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });

            
try
            {   
                
//发送
                mqQue.Send(msg);
            }
            
catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }

        }

 

  第三步中接收消息的代码:

        /// <summary>
        
/// 接收
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnReceive_Click(object sender, EventArgs e)
        {
           
            MessageQueue mqQue 
= null;
            
if (MessageQueue.Exists(sMessageConnectionString))
            {
                mqQue 
= new System.Messaging.MessageQueue(sMessageConnectionString);
            }
            
//得到所有消息
            System.Messaging.Message[] messages = mqQue.GetAllMessages();
            
if (messages.Length > 0)
            {
                
foreach (System.Messaging.Message msgVal in messages)
                {
                    
//根据ID得到消息(这个ID放在消息的label中)
                    if (msgVal.Label==txbReceiveMsgID.Text)
                    {
                        
//同步接收,直到得到一条消息为止,如果消息队列为空,会一直阻塞
                        System.Messaging.Message msg = mqQue.Receive();
                        msg.Formatter 
= new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
                        
//消息的内容
                        txbReceive.Text = "[" + DateTime.Now.ToString() + "]: " + msg.Body.ToString();
                        
break;
                    }
                    
else
                    {
                        txbReceiveMsgID.Text 
= "没有找到指定ID的Message";
                    }
                }
            }
        }

 

  清除所有消息代码:

   /// <summary>
        
/// 清除消息队列
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnClear_Click(object sender, EventArgs e)
        {
            MessageQueue mqQue 
= null;
            
if (MessageQueue.Exists(sMessageConnectionString))
            {
                
//清除所有消息
                mqQue = new System.Messaging.MessageQueue(sMessageConnectionString);
                mqQue.Purge();

            }
        }

 

代码下载:

https://files.cnblogs.com/scottckt/MessageStudy.rar