上篇博文中我们介绍了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. Android jni 编程1(对基本类型字符串的操作)

    最近一直在学安卓的jni,主要参考的是黑马程序员的视频教程,讲的确实不错. 那就自己总结一下吧,算是对学习的复习. 这篇博客也主要参考了这位博主:http://www.cnblogs.com/acti ...

  2. MATLAB 单变量函数一阶及N阶求导

    1 对一维函数的求导及求特定函数处的变量值 %%最简单的一阶单变量函数进行求导 function usemyfunArray() %主函数必须位于最上方 clc clear syms x %syms ...

  3. C语言memset学习

    #include <stdio.h> #include <memory.h> ]); //函数声明 void main(){ ]={{,,},{,,},{,,},{,,}};/ ...

  4. 《javascript个人理解,个人整理。》

    万事开头难. 本人做前端工程师,已几年,没有特别大的,已文字方式去做总结. 前段时间,早已经想好,但是迟迟没有去下笔!好在现在陆陆续续的写下去. 我知道这是一个很大的工程,但是我还是想做下去,不为别的 ...

  5. IE浏览器和CSS盒模型

    网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 盒子模型是CSS中一个重要的概念,理解了盒子模型才 ...

  6. canvas绘图不清晰的解决方案

    现象描述 同样大小的图片(60x60px)用canvas和DOM绘制,结果发现canvas的画面质量要差很多.结果如下图所示. 上图中,左侧红框中的金币采用DOM绘制,右侧和下方的金币和文字等使用ca ...

  7. Material Design学习-----SnackBar

    SnackBar是一个和Toast类似的空间,用于弹出提示作用,但是相比于Toast而已,SnackBar会有一个不错的动画效果,同时当手指完成屏幕中其他操作的时候,SnackBar会立即消失.同时可 ...

  8. Asp.Net 常用工具类之加密——非对称加密RSA算法

    踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...

  9. sql server中部分函数功能详解

    1.TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. SQL Server 的语法: SELECT TOP number|percen ...

  10. 消除input,button之间的间距

    代码: 效果: 问题: input,button标签之间出现了间距,这并不是我们所期望的. 解决方法: 1.在父级元素上设置属性:font-size:0px; 将input父级字体(font-size ...