二、事务性消息处理
事务我想大家对这个词应该都不会陌生,在操作数据库的时候经常都会用到事务,确保操作成功,要么全部完成(成功)

,要么全部不完成(失败)。在MSMQ中利用事务性处理,可以确保事务中的消息按照顺序传送,只传送一次,并且从目的队列成

功地被检索。
那么,在MSMQ上使用事务性处理怎么实现呢?可以通过创建MessageQueueTransation类的实例并将其关联到MessageQueue

组件的实例来执行,执行事务的Begin方法,并将其实例传递到收发方法。然后,调用Commit以将事务的更改保存到目的队列。
创建事务性消息和普通的消息有一点小小的区别,大家可从下图上体会到:

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

启动了事务,那么在发送和接收消息的时候肯定是与原来有一定的差别的,这里我就不做详细介绍,下面给出示意性代码,有兴

趣的朋友可以直接下载本文示例程序代码了解更多。

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

1//连接到本地的队列

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

3Message myMessage = new Message();

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

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

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}

MSMQ 事务性消息处理的更多相关文章

  1. ASP.NET中进行消息处理(MSMQ) 二(转)

          在我上一篇文章<ASP.NET中进行消息处理(MSMQ)一>里对MSMQ做了个通俗的介绍,最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用. 本文在此基础上继续介 ...

  2. ASP.NET中进行消息处理(MSMQ) 二

    在我上一篇文章<ASP.NET中进行消息处理(MSMQ)一>里对MSMQ做了个通俗的介绍,最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用. 本文在此基础上继续介绍MSMQ的 ...

  3. 使用MSMQ 远程队列

    ------------------------------------------------------------------------------------------------- -- ...

  4. MSMQ(Microsoft Message Queue)

    http://www.cnblogs.com/sk-net/archive/2011/11/25/2232341.html 利用 MSMQ(Microsoft Message Queue),应用程序开 ...

  5. Msmq设计文档(赋源代码)

    Msmq设计文档(赋源代码)   Msmq设计文档     文件状态: [√] 草稿 [  ] 正式发布 [  ] 正在修改 文件标识: ECI-MSMQ v01 当前版本: 0.5 作    者: ...

  6. Asp.net面试题

    Asp.net核心技术思想 1.概述反射和序列化 反射:程序集包含模块,而模块包含类型,类型又包含成员.反射则提供了封装程序集.模块和类型的对象.您可以使用反射动态地创建类型的实例,将类型绑定到现有对 ...

  7. C#/ASP.NET/AJAX

      C#/ASP.NET/AJAX ASP.NET 4.5新特性一:强类型数据绑定(Strongly-Type Data-Bindings) 摘要: 随着ASP.NET 4.5的发布提供了很多的新特性 ...

  8. 消息队列(Message Queue)简介及其使用

    消息队列(Message Queue)简介及其使用 摘要:利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信.消 ...

  9. [转]Nodejs进程间通信

    本文转自:http://www.cnblogs.com/rubyxie/articles/8949417.html 一.场景 Node运行在单线程下,但这并不意味着无法利用多核/多机下多进程的优势 事 ...

随机推荐

  1. SQL四大语句、四大完整性、五大约束

    四大语句: 1.数据定义语句: DDL:create.alter.drop.truncate(表结构) 2.数据操纵语句: DML:insert.delete.update.select 3.数据控制 ...

  2. Tomcat服务器环境变量配置及在Eclipse中启动和配置

    本文原创,转载需注明出处: 如何配置在Eclipse中配置Tomcat服务器 1.在配置的时候要右击‘我的电脑‘看是否安装了jdk,配置了jdk的环境变量,看是否有classpath和path是否指向 ...

  3. 转载]SAP囚徒 - 通过销售订单领用到成本中心,FI替代

    转载]SAP囚徒 - 通过销售订单领用到成本中心,FI替代   原文地址:SAP囚徒 - 通过销售订单领用到成本中心,FI替代实现不同成本中心记账科目不同作者:SAP囚徒 物品领用通常是库存管理的范畴 ...

  4. SAP月结操作讲解

    SAP月结操作讲解 https://wenku.baidu.com/view/ac6fe45d312b3169a451a4b9.html   步聚 操作内容 事务码 是否必须 操作时间 月/年结 1 ...

  5. JaveWeb 公司项目(7)----- 通过JS动态生成DIV

    Web网页项目的数据表格功能已经大体完成,下面是另一个主要功能,在线视频的显示 目前我做的项目是渔政监控方面,在之前C#的版本中已经实现了摄像头的在线监控,用的海康封装好的SDK,目前需要做的工作是在 ...

  6. js_提示是否删除小案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. [qt]qstring和string中文支持转换问题

    QString str2qstr(const string str) { return QString::fromLocal8Bit(str.data()); } string qstr2str(co ...

  8. java类加载器和双亲委派模型

    一. 类加载器 ClassLoader即常说的类加载器,其功能是用于从Class文件加载所需的类,主要场景用于热部署.代码热替换等场景. 系统提供3种的类加载器:Bootstrap ClassLoad ...

  9. 在nodejs中的集成虹软人脸识别

    ==虹软官网地址==http://www.arcsoft.com.cn 在官网注册账号,并且申请人脸识别激活码, 选择SDK版本和运行系统(windows/linux/android/ios) ,我们 ...

  10. 基于Arcface 免费离线人脸识别 2.0 Demo C#

    本来打算做个C#版demo,但没用成功.使用虹软最新人脸识别技术开发完成 过程如下: 1. 传入一张单人脸照片: 2.调用检测人脸函数ASFDetectFaces,成功返回人脸信息的指针: 3.使用 ...