上篇博文中我们介绍了Azure Messaging-ServiceBus Messaging消息回执机制。

Azure Messaging-ServiceBus Messaging消息回执机制

本文中我们主要研究消息的事务。直奔主题:

  • Service Bus Queues支持事务,基于TransactionScope
  • Service Bus Queues provide support for local transactions in the context of a single queue.
  • 事务的限制:事务只能包含一个Queue或者Topic,订阅不能放在事务中,同时事务不支持其他系统,例如数据库

那消息事务的实际应用场景有哪些呢?例如:

1.启动一个事务性的会话,将发送更新订单状态消息和更新账户余额消息放到一个事务中,消息发送失败后 rollback,确认消息未被发送。
2.发送更新订单状态消息和更新账户余额消息成功后,启动一个事务性的会话,接收并处理这两条消息。

那我们先从同一个队列中发送多条消息这个场景验证:

   public static void SendMessageTransactional()
{
var sbUtils = new ServiceBusUtils(); //创建队列
sbUtils.CreateQueue(queueName, false); //多次发送消息到OrderQueue
var queueSendClient = sbUtils.GetQueueClient(queueName); using (var trans = new TransactionScope())
{
var order1 = CreateSalesOrder();
var order2 = CreateSalesOrder();
var message1 = sbUtils.Create(order1);
var message2 = sbUtils.Create(order2);
queueSendClient.Send(message1);
queueSendClient.Send(message2);
Console.WriteLine("Send but uncomplete!");
trans.Complete(); Console.WriteLine("Complete!");
}
}

发送消息完成,但是未提交事务前,队列是这样的:

事务提交后Complete:

然后,我们继续研究验证同一个队列接收消息的事务性:有个前提要求:

消息接收时,如果启动事务,消息消费接收模式必须是PeekAndLock模式。

消息接收完成,如果事务不Complete,消息仍旧在消息队列中。

 public static void ReceiveMessageTransactional()
{
var sbUtils = new ServiceBusUtils();
var queueReveiveClient = sbUtils.GetReceiveQueueClient(queueName, ReceiveMode.PeekLock);
using (var trans = new TransactionScope())
{
var message1 = queueReveiveClient.Receive();
message1.Complete();
var message2 = queueReveiveClient.Receive();
message2.Complete();
Console.WriteLine("Received but uncomplete!");
trans.Complete(); Console.WriteLine("Complete!");
}
}

当接收完消息,事务未提交时:

队列中的消息是:

事务提交后:

Azure Service Bus 中消息:

消息已经被消费。

以上就是Azure ServiceBus 中对消息事务的支持。

2017/3/30

Azure Messaging-ServiceBus Messaging消息队列技术系列7-消息事务的更多相关文章

  1. Azure Messaging-ServiceBus Messaging消息队列技术系列8-服务总线配额

    上篇博文中我们介绍了Azure ServiceBus Messaging的消息事务机制: Azure Messaging-ServiceBus Messaging消息队列技术系列7-消息事务(2017 ...

  2. Azure Messaging-ServiceBus Messaging消息队列技术系列-索引篇

    Azure Messaging ServiceBus Messaging相关的技术系列,最近已经整理了不少了,统一做一个索引链接,置顶. 方便查找,并后续陆陆续续再增加. 学习消息队列技术,可以先看第 ...

  3. Azure Messaging-ServiceBus Messaging消息队列技术系列3-消息顺序保证

    上一篇:Window Azure ServiceBus Messaging消息队列技术系列2-编程SDK入门  http://www.cnblogs.com/tianqing/p/5944573.ht ...

  4. Azure Messaging-ServiceBus Messaging消息队列技术系列4-复杂对象消息是否需要支持序列化和消息持久化

    在上一篇中,我们介绍了消息的顺序收发保证: Azure Messaging-ServiceBus Messaging消息队列技术系列3-消息顺序保证 在本文中我们主要介绍下复杂对象消息是否需要支持序列 ...

  5. Azure Messaging-ServiceBus Messaging消息队列技术系列5-重复消息:at-least-once at-most-once

    上篇博客中,我们用实际的业务场景和代码示例了Azure Messaging-ServiceBus Messaging对复杂对象消息的支持和消息的持久化: Azure Messaging-Service ...

  6. Azure Messaging-ServiceBus Messaging消息队列技术系列6-消息回执

    上篇博文中我们介绍了Azure Messaging的重复消息机制.At most once 和At least once. Azure Messaging-ServiceBus Messaging消息 ...

  7. Window Azure ServiceBus Messaging消息队列技术系列1-基本概念和架构

    前段时间研究了Window Azure ServiceBus Messaging消息队列技术,搞了很多技术研究和代码验证,最近准备总结一下,分享给大家. 首先,Windows Azure提供了两种类型 ...

  8. Window Azure ServiceBus Messaging消息队列技术系列2-编程SDK入门

    各位,上一篇基本概念和架构中,我们介绍了Window Azure ServiceBus的消息队列技术的概览.接下来,我们进入编程模式和详细功能介绍模式,一点一点把ServiceBus技术研究出来. 本 ...

  9. Azure Messaging-ServiceBus Messaging消息队列技术系列1-基本概念和架构

    前段时间研究了Window Azure ServiceBus Messaging消息队列技术,搞了很多技术研究和代码验证,最近准备总结一下,分享给大家. 首先,Windows Azure提供了两种类型 ...

随机推荐

  1. phpcms如何做企业站--> 替换首页最初操作

    首先用一个静态首页的模板,通过cms进行替换做成一个有后台的 首页的替换流程首先要先把静态网页做出来,拿这个页面去替换 页面所有的文件都在这,做静态页面的文件 现在要做的是把这些文件复制一下拿到php ...

  2. ImageSpan图片不能居中的问题

    点击下载:MyImageSpan.txt 使用ImageSpan的童鞋应该都会遇到这样一个困惑,图片不能居中显示,ImageSpan中只有ImageSpan.ALIGN_BASELINE与ImageS ...

  3. jQuery_第三章_工厂函数

  4. WIn7下Ubuntu 14.04 安装

    1. 在Windows下下载Ubuntu14.04的ISO镜像,解压 2. 打开wubi.exe,填写用户名,密码等相关信息,在这里需要注意的是,磁盘空间最好选到最大(30G),执行安装 3. 按照提 ...

  5. loadrunner测试结果分析

    LR性能测试结果样例分析 测试结果分析 LoadRunner性能测试结果分析是个复杂的过程,通常可以从结果摘要.并发数.平均事务响应时间.每秒点击数.业务成功率.系统资源.网页细分图.Web服务器资源 ...

  6. Log日志规范

    Overview 一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神.程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的.本文想讨论的是 ...

  7. 细谈position属性:static、fixed、relative与absolute

    学习WEB有些时日了,对DOM中的定位概念有些模糊,特地花了一个下午的时间搜资料.整理写下这篇随笔. 首先,我们要清楚一个概念:文档流. 简单的讲,就是窗体自上而下分成一行一行,并在每行中按照从左到右 ...

  8. 《深入理解Java虚拟机》学习笔记之工具

    善于利用工具,不仅可以加快我们分析数据,还可以快速定位和解决问题.现在我们就来看看虚拟机性能监控和故障处理工具. 在JDK的bin目录可以看到sun免费送给了我们很多小工具,这些工具虽然小巧但功能强大 ...

  9. iOS实现视频和图片的上传

    关于iOS如何实现视频和图片的上传, 我们先理清下思路 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. 如何把视频存到缓存路径中? #5. 如何上传 ...

  10. Codeblocks快捷键

    Codeblocks快捷键: Ctrl+Shift+Enter:复制控制台exe内容 Ctrl+Z:撤销 Ctrl+F:查找  Ctrl+R:查找替换功能 Ctrl+Shift+C:加注释     C ...