首页 > 开发 > .Net > 正文

.net的MSMQ异步调用

2020-02-03 15:57:47
字体:
来源:转载
供稿:网友
中国最大的web开发资源网站及技术社区,
1、引用system.messagiong.dll
2、using system.messagiong 命名空间
3、创建/建立自己需要的队列(这里监测专有队列)

string queuename=".//private$//testqueue";
messagequeue q;
if(messagequeue.exists(queuename) )
{
q=new system.messaging.messagequeue (queuename);
}
else
{
q=messagequeue.create(queuename);
}
这代代码执行后,会在消息队列中的专有队列看到名为testqueue的队列。具体为管理工具--〉计算机管理--〉服务和应用程序--〉消息队列--〉专用队列
可以看到队列中存在的消息
4、向队列发送消息
两种发送消息的方式:
简单消息,直接利用q.send("....");的方式发送,复杂消息(譬如一个特定对象,当然是可序列化的)采用
message m=new message();
m.label ="msg1";
m.body ="test body";
q.send (m);
发送。消息会采用缺省的xml格式编码送到队列中
5、消息接收
主动方式,会同步阻塞当前线程
message m=receive(); //接收同时,从队列中删除消息
or
message m=peek(); //不删除接收到的消息
被动方式,异步调用方式,不会阻塞当前线程
q.receivecompleted +=new receivecompletedeventhandler( receivedevt); //事件
q.beginreceive();
其中receivedevt要么为静态函数,要么必须是属于实例化的对象的可访问函数
private static void receivedevt(object source, receivecompletedeventargs asyncresult)
{
try
{

messagequeue mq = (messagequeue)source;
message m = mq.endreceive(asyncresult.asyncresult);
//此事m为异步接收到的消息
//在此插入处理消息的代码
console.writeline("接收到消息"+m.label );

mq.beginreceive();//接收下一次事件
}
catch(messagequeueexception)
{
}
return;
}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表