zoukankan      html  css  js  c++  java
  • MSMQ 事务性消息处理

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

  • 相关阅读:
    取得GridPanel选定行所有字段值
    从少林寺的核心竞争力看软件作坊和正规军的差异
    估算软件项目成本
    Delphi FastReport报表常用方法
    少林寺的组织结构分析
    embed标签使用
    C# 多种方式播放Wav声音
    js 关闭浏览器
    ExtJS GridPanel根据条件改变字体颜色
    [Jsp] 如何在JSP页面快速输出从Servlet接收的数据_看JSTL常用C标签的威力
  • 原文地址:https://www.cnblogs.com/mmbbflyer/p/7773303.html
Copyright © 2011-2022 走看看