首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MSMQ事务提交、中止还是处置?

MSMQ(Microsoft Message Queuing)是微软提供的一种消息传递技术,用于实现分布式应用程序之间的异步通信。在MSMQ中,事务是一种重要的概念,用于确保消息的可靠传递和处理。

事务提交是指在消息发送方将消息发送到队列之后,消息会被立即传递给接收方,并且接收方会立即处理该消息。这种方式适用于对消息的实时性要求较高的场景,例如在线支付系统中的订单处理。

事务中止是指在消息发送方将消息发送到队列之后,消息会被传递给接收方,但接收方不会立即处理该消息。接收方可以选择在合适的时机处理该消息,或者根据业务逻辑判断是否需要处理该消息。这种方式适用于对消息的实时性要求较低的场景,例如日志记录系统中的日志消息。

事务处置是指在消息发送方将消息发送到队列之后,消息不会被传递给接收方,而是被丢弃或者放入死信队列。这种方式适用于消息发送方认为该消息无效或者不需要处理的场景。

对于MSMQ事务的选择,需要根据具体的业务需求和系统设计来决定。事务提交可以保证消息的实时性和可靠性,但可能会增加系统的复杂性和延迟。事务中止可以提供更灵活的消息处理方式,但可能会导致消息的延迟和不确定性。事务处置则适用于不需要处理的消息,可以减少系统的负载和资源消耗。

腾讯云提供了消息队列服务(Tencent Cloud Message Queue,CMQ),可以用于实现分布式应用程序之间的消息传递。CMQ支持事务消息,可以根据业务需求选择事务提交、中止或处置的方式处理消息。具体产品介绍和使用方法可以参考腾讯云官方文档:消息队列 CMQ

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

POSTGRESQL PERPARE 事务提交方式,到底用还是不用

关于Prepare 提交事务的方式问题,有两个阵营,如爱之人,爱如子嗣拥入怀中,不爱之人,如弃置水中随波逐流。...那么到底prepare事务提交方式,到底应该不应该用,怎么用是一个开发应该知晓的问题,同时由于开发使用了prepare 提交事务,造成的问题,DBA 也应该知道如何处理。...在对prepared transaction执行回滚或提交操作之前,将一直维护该事务,这个是官方的解释,也就是prepare 操作后,事务已经和数据库服务绑定。...,相关的函数会开始在共享内存建立一个全局事务,同时会将事务的资源信息写入磁盘,这个事务和当前的backend接触绑定,无论当前推出会话,还是重启PG,Prepare 事务会一直存在,不会释放。...该特性的预期用途是,一旦外部事务管理器验证了其他数据库也准备好了提交,通常就会提交或回滚准备好的事务

32251

谈谈分布式事务之二:基于DTC的分布式事务管理模型

当Service A调用本机的资源管理器的时候,会将该资源管理器纳入到本事务之中(对于我们后续要介绍的System.Transactions事务,像SQL Server、Oracle以及MSMQ等资源管理器都能够自动感知到当前的环境事务...注:在事务初始化服务决定提交事务之前,任何一个参与者均可以中止(Abort)该事务,任何一个参与者对事务中止都将导致整个分布式事务的回滚。...,但是不希望接收真正的事务提交请求; 中止(Aborted):参与者要求中止事务。...2、第二阶段(Phase II):提交(Commit)或中止(Abort) 作为事务提交树根节点的DTC根据最终的事务结果,对整个事务进行最终的提交或者中止操作。...当重启后,对于本机的所有未决事务,DTC会向上级DTC发送查询请求,获取每一个事务最终的结果(提交还是中止)。

78660
  • 如何让普通变量也支持事务回滚?

    一、什么是事务型的变量 本文中所说的事务型变量指的是这样的变量: 在事务开始前,变量的初始值会被保存; 在事务中对变量的赋值只有在事务被成功提交后才会真正赋值给变量; 如果事务中止导致回滚,变量的值将会恢复到事务开始之前的状态...在事务范围内将值赋值为2,然后调用DoSomething方法,并提交事务。如果DoSomething执行过程中抛出异常,整个事务将会回滚。...当整个事务中止回滚后,变量v的值回复到事务开始之前的状态,即值为1。...(Service)或者组件(Component); 资源管理器(RM:Resource Manager):代表用于管理具体事务型资源的软件程序,比如数据库或者队列(MSMQ)等; 事务管理器(TM:...Initialize方法会在资源纳入事务的时候被调用,用于执行一些初始化操作。SinglePhaseCommit、Rollback和Promote用于通知事务正在被提交、回滚和提升。

    79090

    谈谈分布式事务之二:基于DTC的分布式事务管理模型

    (Service)或者组件(Component); 资源管理器(RM:Resource Manager):代表用于管理具体事务型资源的软件程序,比如数据库或者队列(MSMQ)等; 事务管理器(TM...,只有最初的应用才才是事务的开启者; 事务的奉送(Marshaling)和传播(Propagation):将应用的本地事务封送、传播给另一个应用或者资源管理器; 提交事务事务的开启者同时也是事务最终的提交者...,当事务相关的操作顺利完成后,最初开启事务的应用会提交事务。...平台下SQL Server 2000和MSMQ均不支持LTM,更不用说Oracle和DB2。...和LTM一样,KTM对易失型事务资源没有限制,却至于单一的持久化事务资源被涉及。 从上面的介绍我们不难看出,无论是LTM还是KTM,其管辖范围仅限于本地事务,对于分布式事务却无能为力。

    75180

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

    如果过期或无法传递的消息是事务性消息,则被存储在一种特殊的死信队列中,称为“事务性死信队列”。死信存储在过期消息所在的计算机上。有关超时期限和过期消息的更多信息,请参见默认消息属性。...事务性消息处理 — 将多个相关消息耦合为单个事务,确保消息按顺序传递、只传递一次并且可以从它们的目标队列中被成功地检索。如果出现任何错误,将取消整个事务。...re: 消息队列(Message Queue)简介及其使用 标题 请输入标题 姓名 请输入你的姓名 主页 内容(提交失败后,可以通过“恢复上次提交...”恢复刚刚提交的内容) 请输入评论内容 Remember Me?...注销 使用高级评论 Top 订阅回复 取消订阅 恢复上次提交 [使用Ctrl+Enter键可以直接提交] image.png

    1.9K81

    DDIA:一文带你了解“两阶段提交

    提交事务还是中止事务,决定性时刻在于提交记录成功刷盘的那一瞬间:在此之前,事务可能会被中止(由于宕机);在此之后,该事务一定会被提交(即使宕机)。...如果事务允许在提交中止,其他已经读取了该事务结果的事务也会失效,从而引起事务的级联中止。...当协调者收到所有参与者准备提交的回复后,会决定提交还是中止事务(只有在所有参与者都回复“可以”时,才会提交)。协调者需要将该决策写入事务日志,并下刷到磁盘,以保证即使宕机重启,该决策也不会丢失。...此时,协调者宕机,还没来得及给数据库实例 1 发送提交请求,因此该实例不知道是要提交还是中止事务。...第一阶段后协调者故障 在未收到协调者的消息前,参与者无从得知是要提交还是中止。原则上,参与者之间可以互相沟通以确定该如何进行下一步,并最终达到一致,但这已经超脱了 2PC 协议范畴。

    39410

    谈谈分布式事务之二:基于DTC的分布式事务管理模型

    (Service)或者组件(Component); 资源管理器(RM:Resource Manager):代表用于管理具体事务型资源的软件程序,比如数据库或者队列(MSMQ)等; 事务管理器(TM...,只有最初的应用才才是事务的开启者; 事务的奉送(Marshaling)和传播(Propagation):将应用的本地事务封送、传播给另一个应用或者资源管理器; 提交事务事务的开启者同时也是事务最终的提交者...,当事务相关的操作顺利完成后,最初开启事务的应用会提交事务。...平台下SQL Server 2000和MSMQ均不支持LTM,更不用说Oracle和DB2。...和LTM一样,KTM对易失型事务资源没有限制,却至于单一的持久化事务资源被涉及。 从上面的介绍我们不难看出,无论是LTM还是KTM,其管辖范围仅限于本地事务,对于分布式事务却无能为力。

    81680

    DDIA:共识协议和分布式事务有什么关系?

    中止事务时,会丢弃所有部分执行的结果。 只有参与系统都支持原子提交时,上述分布式事务才是可行的。例如,假设处理消息的一个副作用是发送邮件,且邮件服务器不支持两阶段提交。...然而,在实践中,常会产生一些孤立的(orphaned)未定事务——即,由于某种原因,事务的协调者(比如由于软件 bug 事务日志丢失或者损坏)无从判断事务的最终结果是提交还是回滚。...唯一的出路是让管理员手动地来提交或者中止事务。管理员首先需要检查所有包含未定事务的参与者,看是否有任何参与者提交或者中止了,从而对其他卡主的参与者手动执行相同操作(通过外力来让所有参与者达成一致)。...很多 XA 事务的实现会留有紧急后门,称为启发式决策(_heuristic decisions_):允许一个参与者不用等待协调者的决策,而单方面决定中止还是提交一个未定事务。...事实上,这正是我们在两阶段提交算法中看到的:一旦协调者故障,所有处于未定状态的参与者都无法独自决策是提交还是中止。 可终止性是对容错的一种形式化描述(从结果来描述)。

    31210

    精通Java事务编程(8)-可串行化隔离级别之可串行化的快照隔离

    如若存在潜在冲突,也不阻止事务,而是继续执行事务,寄希望于一切平安。而当事务提交时(只有可串行化的事务才被允许提交。),DB会检查是否冲突(即违反隔离性原则):若是,则中止事务并重试。...为防止这种异常,DB需跟踪一个事务由于MVCC可见性规则而被忽略的其它事务写。当事务提交时,DB会检查是否存在被忽略的写现在已被提交的,若是,则当前事务必须中止。 为何要等到提交?...43提交时,被中止或仍处于未被提交,因此读取的并非旧值 通过避免不必要的中止,SSI可高效支持那些需在一致性快照中运行很长时间的读事务。...当43提交时,来自42的冲突写入已被提交,所以43必须中止。 3.3.5 性能 许多工程细节会影响算法实际效果。...有的case读过期数据不会造成太大影响:这还是完全取决于具体场景,有时可确信执行结果都是可串行化的,PostgreSQL 使用该理论减少不必要的中止

    90020

    快速入门系列--WCF--06并发限流、可靠会话和队列服务

    回复队列:MSMQ完全采用单向的消息交换模式,消息发送后是没有回复消息返回给发送端的,但有些场景下,需要包括简单确认外的回复内容,这是就涉及服务队列 日志队列:当消息成功发送或接受后,MSMQ可以将消息的拷贝作为发送或接受日志存储起来...事务性队列:MSMQ和SQL Server一样,属于事务管理器(RM,ResourceManager),可以登记到一个分布式事务中。...报表队列:是公有队列,存储路由跟踪的报表信息 子队列:是一种消息容器,针对消息队列的一个常见操作是将消息从一个队列转移到另一个,其典型应用包括:有序递交,可以将乱序的消息暂时放在子队列中,排序后有序提交...基于MSMQ的API都集中在System.Messaging中,其常见的路径格式及其示例如下。...整个构架包括:消息队列的创建和删除;消息队列的查询;创建一个MessageQueue对象;消息队列的格式名称;消息的发送;MSMQ消息;消息的接收与查看 其事务模型、事务批量操作、会话、错误处理等操作相对复杂

    1K70

    分布式事务中确保数据一致性,以及两阶段提交协议和三阶段提交协议的工作原理

    参与者执行事务操作,并将操作结果(已准备或者已中止)返回给协调器。提交阶段:在这个阶段,协调器根据收到的响应,决定是提交(Commit)还是中止(Abort)事务。...如果所有参与者都返回准备就绪的响应,协调器将发送提交请求到所有参与者;否则,协调器将发送中止请求到所有参与者。两阶段提交协议的优点是简单且易于实现,它可以确保所有参与者在提交阶段都达到一致的状态。...最终提交阶段:在这个阶段,协调器如果收到所有参与者的确认消息,则发送最终提交请求到所有参与者,完成事务提交。否则,协调器发送中止请求到所有参与者,完成事务中止。...然而,三阶段提交协议仍然存在单点故障的问题,因为协调器在最终提交阶段需等待所有参与者的确认消息,如果协调器出现故障,整个事务也将无法完成。...异同点比较两阶段提交协议和三阶段提交协议的主要异同点如下:相同点:两者都是为了在分布式系统中保证数据一致性而设计的分布式事务协议。两者都包含准备阶段,以协调参与者的事务操作。

    38481

    事务与隔离级别------《Designing Data-Intensive Applications》读书笔记10

    脏读: 一个事务已经向数据库写入了一些数据,但该事务尚未提交中止。另一个事务可以看到未提交的数据,就称为脏读。Read Committed的隔离级别可以防止脏读。...Read Committed的隔离级别事务可以防止脏写,通常是通过延迟写操作直到前一个写事务提交中止时在继续写入。...数据库通过使用行级锁防止脏写:当事务要修改某个特定行时,它必须首先获取该行的锁。然后必须保留该锁,直到事务提交中止为止。...事务A获取了数据的写锁,事务B想读取对应的数据,事务B也必须等到事务提交中止后方可进行读取。 事务A获取了数据的写锁,事务B想写对应的数据,事务B也必须等到事务提交中止后方可进行写入操作。...任何其他事务都不能同时拥有锁,(无论是共享还是独占)因此如果对象上存在任何锁,事务A必须等待。 如果事务A先读取数据,然后写入数据。它可以将共享锁升级为独占锁。升级与直接获得独占锁相同。

    50760

    分布式系统的一致性算法------《Designing Data-Intensive Applications》读书笔记13

    情况就变得十分复杂了: 有些节点可能检测到约束违反或冲突,需要中止,而其他节点能够成功地提交。 一些提交请求可以在网络中丢失,最终中止由于超时,而其他提交请求获得通过。...一个成功提交的两阶段协议 两阶段提交的问题 一旦出现了网络故障或参与者失效,协调器节点可以通过超时机制来中止事务。二如果在阶段二出现提交中止事务失败,协调器节点可以无限重试直到故障恢复。...但是,一旦参与者收到了一个准备请求并回答了:是,它就必须等待从协调器节点的指令,事务是被提交还是中止。而一旦协调器节点崩溃或出现网路故障,参与者只能无限期的等待。如下图所示: ?...唯一的办法是等待协调器恢复,这就是为什么在向参与者提交中止事务请求之前,协调器必须将其提交中止的结果写入本地磁盘上的事务日志。当协调器恢复时,它通过读取其事务日志确定所有可疑事务的状态。...任何在协调器日志中没有提交记录的事务都会被中止。 2.协商一致性 由上文我们可以了解,在分布式系统之中可以使用两阶段提交协议来实现的事务(也可以使用两阶段提交协议的升级版三阶段提交协议)。

    54920

    零基础入门分布式系统 7.1 Two-phase commit

    当一个事务跨越多个节点时,我们仍然希望整个事务具有原子性:也就是说,要么所有节点都必须提交事务并执行更新,要么所有节点都必须中止事务并丢弃或回滚状态。...然后,协调者将其决定发送给每个副本,它们都按照指示提交中止(这是第二阶段)。如果决定是提交,每个副本保证能够提交事务,因为之前的prepare请求打好了基础。如果决定放弃,副本就会回滚该事务。...二阶段提交的问题是,协调者会单点故障。协调者可以通过将commit提交或abort中止决定提前写入稳定的存储空间来容忍故障。...任何存疑事务都必须等到协调者恢复后才能知道自己的安排;它们不能单方面决定提交中止,因为这种决定最终可能与协调者和其他节点不一致,导致违反原子性。...由于全序广播保证在每个节点上以相同的顺序递交,所有节点都会根据副本的第一张投票是commit还是abort达成一致,即使竞争条件下多个节点为同一副本广播相互矛盾的投票。

    31120

    MIT 6.830数据库系统 -- lab four

    很明显,我们应该在事务提交中止后释放与它相关联的所有锁,以确保严格的2PL。但是,在其他情况下,在事务结束之前释放锁可能会很有用。...当查询完成时,会调用BufferPool中的transactionComplete方法 通过参数commit指定事务提交还是中止。...不存在commit参数版本的方法应该总是提交的,所以可以直接调用transactionComplete(tid, true) 当我们提交事务时,我们应该将事务关联的所有脏页刷新到磁盘;当我们中止事务时,...,它将中止事务。...假设当事务t等待锁时检测到死锁的存在,中止t正在等待的所有事务;这可能导致大量工作被撤销,但可以保证t会取得进展。或者,我们可以中止t,以使其他事务有机会取得进展。这意味最终用户必须重试事务t。

    28230

    精通Java事务编程(7)-可串行化隔离级别之两阶段锁定(2PL,two-phase locking)

    ,则锁可确保第二个写必须等第一个写完成事务中止提交)才能继续。...但对象只要有写,就得加锁独占访问: 若事务 A 已读某对象,此时B想写该对象,则必须等A提交中止才能继续,这确保 B 不能在 A 执行过程的中间意外改变对象 若事务 A 已写某对象,此时 B 想读该对象...,则 B 必须等 A 提交中止才能继续,像图-1读取旧版本的对象在 2PL 下不可接受 2PL不仅在并发写互斥,读写之间也互斥。...3.2.2 性能 其巨大缺点及1970s以来没有被广泛使用的原因还是其性能:事务吞吐量和查询响应时间比弱隔离级别下差太多。 部分因为获取、释放锁开销,但更重要是并发性降低。...若B持有匹配的谓词锁,则A须等B完成提交中止后才能继续 关键在于,谓词锁甚至适用于数据库中尚不存在,但将来可能会添加的对象(幻象)。

    81420

    精通Java事务编程(1)-深入理解事务

    十年来,事务一直是简化这些问题的首选机制。事务将应用程序的多个读、写操作组合成一个逻辑单元。即事务中的读、写操作是个执行的整体:整个事务要么成功(提交),要么失败(中止或回滚)。...把多个写操作纳入到一个原子事务,万一出现这些故障而导致无法完成最终提交,则事务中止,且DB须丢弃或撤销那些局部完成的更改。...但主要还是靠应用程序定义数据的有效/无效状态,DB 主要还是负责存储。 原子性,隔离性和持久性是DB 本身属性,而ACID的一致性更多是应用层的属性。...图-3说明了对原子性需求:若事务过程中出错,导致邮箱和未读计数器的内容不同步,则事务将被中止事务将被中止,且之前插入的电子邮件将被回滚。 多对象事务要求确定知道某种方式包含哪些读写操作。...若TCP连接中断,则事务必须中止。假定中断发生在客户端请求提交之后,但在服务器确认提交完成前,则客户端最后并不知道事务是否已完成提交

    96830
    领券