MSMQ 事务性消息处理

2、事务性消息处理
事务我想你们对这个词应该都不会陌生,在操做数据库的时候常常都会用到事务,确保操做成功,要么所有完成(成功)
,要么所有不完成(失败)。在MSMQ中利用事务性处理,能够确保事务中的消息按照顺序传送,只传送一次,而且从目的队列成
功地被检索。
那么,在MSMQ上使用事务性处理怎么实现呢?能够经过建立MessageQueueTransation类的实例并将其关联到MessageQueue
组件的实例来执行,执行事务的Begin方法,并将其实例传递到收发方法。而后,调用Commit以将事务的更改保存到目的队列。
建立事务性消息和普通的消息有一点小小的区别,你们可从下图上体会到: 数据库

1//建立普通的专用消息队列
2MessageQueue myMessage = MessageQueue.Create(@".\private$\myQueue");
3//建立事务性的专用消息队列
4MessageQueue myTranMessage =MessageQueue.Create(@".\private$\myQueueTrans", true);spa

启动了事务,那么在发送和接收消息的时候确定是与原来有必定的差异的,这里我就不作详细介绍,下面给出示意性代码,有兴
趣的朋友能够直接下载本文示例程序代码了解更多。orm

普通的消息发送示意性代码:队列

1//链接到本地的队列事务

2MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");消息队列

3Message myMessage = new Message();string

4myMessage.Body = "消息内容";it

5myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });io

6//发送消息到队列中下载

7myQueue.Send(myMessage);
启动了事务后的消息发送示意性代码:

1//链接到本地的队列

2MessageQueue myQueue = new MessageQueue(".\\private$\\myQueueTrans");

4Message myMessage = new Message();

5myMessage.Body = "消息内容";

6myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });

8MessageQueueTransaction myTransaction = new MessageQueueTransaction();

9//启动事务

10myTransaction.Begin();

11//发送消息到队列中

12myQueue.Send(myMessage, myTransaction); //加了事务

13//提交事务

14myTransaction.Commit();

15Console.WriteLine("消息发送成功!");

读取消息示意性代码:
1//链接到本地队列

2MessageQueue myQueue = new MessageQueue(".\\private$\\myQueueTrans");

3myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });

4if (myQueue.Transactional)

5{
MessageQueueTransaction myTransaction = new MessageQueueTransaction();
//启动事务
myTransaction.Begin();
//从队列中接收消息
Message myMessage = myQueue.Receive(myTransaction);
string context = myMessage.Body as string; //获取消息的内容
myTransaction.Commit();
Console.WriteLine("消息内容为:" + context);

14}

相关文章
相关标签/搜索