.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!");
}
}
}
{
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;
}
}
}
{
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;
}
}
}