.Net消息队列学习(一)

.Net消息队列学习(一)
    下面的示例只是涉及到构建发送者,发送复杂消息等操作。这里的复杂消息包括两种,一种是作者自己封装的一个类,获取对话框中的几个文本对话框的值。第二种是Net中自带的类Message,t填充他的几个属性,代码如下:
 

private  System.Messaging.Message setMessage()
        
{
            System.Messaging.Message msg
=new System.Messaging.Message();
            msg.Label
="A message lable";
            msg.Body
="The message body";
            msg.TimeToBeReceived
=TimeSpan.FromSeconds(4000);
            msg.UseDeadLetterQueue
=true;
            
return msg;
        }


        
private   void  button1_Click( object  sender, System.EventArgs e)
        
{
            MessageQueue mq;

            SendForm form
=new SendForm();

            
if(!MessageQueue.Exists(@"./private$/chelei"))
            
{
                
try
                
{
                    mq
=MessageQueue.Create(@"./private$/chelei");
                    form.Name
=this.txtname.Text;
                    form.Sex
=this.txtsex.Text;
                    form.Email
=this.txtemail.Text;
                    form.Address
=this.txtaddress.Text;
                    mq.Send(form,
"信息");
                    mq.Close();
                    MessageQueue.Delete(
@"./private$/chenlei");

                }

                
catch(Exception ex)
                
{
                    MessageBox.Show(ex.Message,
"Warning!");

                
                
//    
                }

            }

            
else
            
{
                
try
                
{
                    mq
=new MessageQueue(@"./private$/chenlei");
                    form.Name
=this.txtname.Text;
                    form.Sex
=this.txtsex.Text;
                    form.Email
=this.txtemail.Text;
                    form.Address
=this.txtaddress.Text;
                    mq.Send(form,
"信息");
                    mq.Close();
                    MessageQueue.Delete(
@"./private$/chenlei");
                }

                
catch(Exception ex)
                
{
                    MessageBox.Show(ex.Message,
"Warning!");

                }


                
            }

        


        }


        
private   void  button1_Click_1( object  sender, System.EventArgs e)
        
{
            
try
            
{
                MessageQueue mq;
                
if(MessageQueue.Exists(@"./private$/aa"))
                
{
                    mq
=new MessageQueue(@"./private$/aa");
                    mq.Send(
this.setMessage());

                }

                
else
                
{
                    mq
=MessageQueue.Create(@"./private$/aa");
                    mq.Send(
this.setMessage());
                }

                mq.Close();
                MessageQueue.Delete(
@"./private$/aa");
            }

            
catch(Exception ex)
            
{
                MessageBox.Show(ex.Message,
"Warning!");
            }

        }


    }

说明:
1、通过设置TimeToBeReceived属性,这个消息可以在目标队列中保存20秒。
如果没有在20秒内从这个队列中读取他,队列就会删除这条消息。
设置UseDeadLetter属性为true可以通知MSMQ在把它从目标队列中删除之前,把消息复制到"Dead-letter messages"系统队列中
2、只有在发送消息的计算机在域模式下运行MSMQ时,才可以使用简单路径引用网络上的公共消息队列
私有队列路径表示:./private$/aa
公共队列路径表示:./aa
3、具体的SendForm类如下:

public   class  SendForm
    
{
        
        
private string m_Name;
        
private string m_Sex;
        
private string m_Email;
        
private string m_Address;
        
public SendForm()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
public SendForm(string name,string sex,string email,string address)
        
{
            
this.m_Name=name;
            
this.m_Sex=sex;
            
this.m_Email=email;
            
this.m_Address=address;

        }

        
public string Name
        
{
            
get
            
{
                
return this.m_Name;
            }

            
set
            
{
                
this.m_Name=value;
            }

        }

        
public string Sex
        
{
            
get
            
{
                
return this.m_Sex;
            }

            
set
            
{
                
this.m_Sex=value;
            }

        }

        
public string Email
        
{
            
get 
            
{
                
return this.m_Email;
            }

            
set
            
{
                
this.m_Email=value;
            }

        }

        
public string Address
        
{
            
get
            
{
                
return this.m_Address;
            }

            
set
            
{
                
this.m_Address=value;
            }

        }

    }

怎样引用队列?

    方式一、
    通过简单路径引用队列
    只有在发送消息的计算机在域模式下运行MSMQ时,才可以使用简单路径引用网络上的公共消息队列。这 样打开队列的请求首先会访问Activte Directory服务器来验证是否在这个队列,然后在网络中解析他的位置。

    方式二、
    通过直接路径引用队列
我们可以通过直接路径在工作组模式下引用公共或私有队列,甚至在网络断开时也可以。当通过直接路径打开一个队列时,MSMQ不会访问Activte Directory服务器。实际上这个
消息会直接发送到路径所指定的队列中去。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值