IBM MQ 的保证交付如何运作

     2023-02-22     145

关键词:

【中文标题】IBM MQ 的保证交付如何运作【英文标题】:How does IBM MQ's guaranteed delivery work 【发布时间】:2021-06-07 14:42:46 【问题描述】:

假设 2 个银行系统(假设它们是 A 和 B)使用 IBM MQ 通过发送消息来相互通信,假设一个场景是 RecordA 在 A 处,RecordB 在 B 处。当在 RecordA 需要的地方发起事务时当且仅 RecordB 更新时更新。 MQ 是如何实现的?

例如,一笔资金转账,从 A 的 AccountA 中扣除 100 美元,并在 B 的 AccountB 中增加 100 美元,

一种可能性是: A 首先启动事务并向 B 发送消息,一旦 MQ 保证消息的传递,它就会执行扣除,此时 B 也将执行加法。如果 MQ 未能保证消息的传递而实际上它可能已经传递了怎么办?在这种情况下,A 会怎么做? (其中一种情况是消息被传递,但由于通信介质故障,确认在传输过程中丢失,当然我们可以确认确认,但同样的问题再次出现)

我无法想象 IBM MQ 正在使用的那个问题的解决方案。我错过了什么?该问题是否存在解决方案?

【问题讨论】:

IBM MQ 提供有保证的交付,但没有将其称为有保证的交付。这仅适用于持久消息。持久消息在每个跃点写入磁盘,并在 MQ 服务器之间进行确认。 【参考方案1】:

MQ 并没有真正使用确认,而是使用事务。 为了缓解您描述的问题,您需要在 B 上执行以下操作:

    在同步点下获取消息 进程转移 提交消息 在您的系统上提交传输

这样,如果 MQ 在您提交获取消息之前失败,您可以回滚本地处理。 (同样的方式,如果你的本地处理失败,可以回滚获取消息。)并且在 MQ 恢复后,你可以尝试再次处理消息(前提是它是持久消息)。

当然,A 需要以类似的方式发送传输,因此您的本地更改始终与放置/获取消息保持一致。当消息在 MQ 上时,MQ 保证只发送一次。

为了进一步改进事务处理,MQ 还支持 XA 协调事务。因此,您可以在 QM 和您的应用程序之间启动协调事务,确保同时提交或回滚用于放置/获取消息和更改 DB 的事务。

【讨论】:

mq系列11:如何保证消息可靠性传输(除夕奉上)

...列的高可用保障MQ系列9:高可用架构分析MQ系列10:如何保证消息幂等性消费1介绍这篇我们来说说MQ消息的可靠性传输。可靠性传输其实包含 查看详情

如何保证mq消息必达

此文章属于笔记,原属58沈剑一、MQ消息必达,架构上的两个核心设计点:消息落地消息超时、重传、确认四大部件:发送端接收端服务端固化存储组成二、上半场消息必达以及消息重复问题上半场的流程发送端MQ-client将消息发送给... 查看详情

如何在 IBM Websphere MQ 中创建指向队列的别名主题?

】如何在IBMWebsphereMQ中创建指向队列的别名主题?【英文标题】:HowtocreateanaliastopicpointingtoaqueueinIBMWebsphereMQ?【发布时间】:2016-06-2114:06:16【问题描述】:我正在尝试通过MQTT协议在使用WebSphereMQ队列的应用程序和使用WebsphereMQ主题... 查看详情

mq相关问题

...点优点缺点各种MQ的适用场景activemqrabbitmqrocketmqkafka如何保证MQ高可用?rabbitmq高可用kafka高可用如何保证消息不被重复消费发送的消息丢失rabbitmq的消息丢失kafka的消息丢失如何保证消息的顺序性?MQ相关问题为什么使用MQ解耦如:... 查看详情

JMS/Active MQ - 代理与消费者重新交付

】JMS/ActiveMQ-代理与消费者重新交付【英文标题】:JMS/ActiveMQ-brokervsconsumerredelivery【发布时间】:2014-10-2312:44:36【问题描述】:据我了解(http://activemq.apache.org/message-redelivery-and-dlq-handling.html),消费者或经纪人都可以重新交付。不... 查看详情

关于mq的几件小事如何保证消息不丢失(代码片段)

1.mq原则数据不能多,也不能少,不能多是说消息不能重复消费,这个我们上一节已解决;不能少,就是说不能丢失数据。如果mq传递的是非常核心的消息,支撑核心的业务,那么这种场景是一定不能丢失数据的。2.丢失数据场景... 查看详情

面试官问:如何保证mq消息是有序的?(代码片段)

为了系统间解耦,我们通常会引入MQ框架,大家各司其职共同完成上下游的业务流程。大致过程:生产端,创建一条消息,通过网络发送到MQServerMQ将消息存储在topic的一个分区里消费端,从分区中拉取消息&... 查看详情

如何通过 IBM MQ 使用 JMS 点对点消息传递模型来测量 SuT 的响应(处理)时间?

】如何通过IBMMQ使用JMS点对点消息传递模型来测量SuT的响应(处理)时间?【英文标题】:HowcanImeasuretheresponse(processing)timesofaSuTusingJMSPoint-to-PointmessagingmodelthroughIBMMQ?【发布时间】:2021-12-1305:26:04【问题描述】:我有一个设置了2... 查看详情

mq中如何保证消费者顺序消费

参考技术A通常mq可以保证先到队列的消息按照顺序分发给消费者消费来保证顺序,但是一个队列有多个消费者消费的时候,那将失去这个保证,因为这些消息被多个线程并发的消费。但是有的时候消息按照顺序处理是很重要的,... 查看详情

如何将用户定义的用户名从 IBM Websphere Application 服务器传递到 AS400 MQ 服务器进行身份验证?

】如何将用户定义的用户名从IBMWebsphereApplication服务器传递到AS400MQ服务器进行身份验证?【英文标题】:HowtopassuserdefinedusernamefromIBMWebsphereApplicationservertoAS400MQserverforauthentication?【发布时间】:2014-11-0723:42:42【问题描述】:我在... 查看详情

IBM WebSphere MQ 请求/回复场景

...列管理器执行此操作。但是,我无法完全理解这实际上是如何工作的。假设我有多个将消息放入请求队 查看详情

mq中的坑及高并发下保证接口的幂等性

...问题3消息丢失问题4消息顺序问题5消息堆积高并发下如何保证接口幂等性?接口防重设计1insert前先select2加悲观锁3加乐观锁 查看详情

mq中的坑及高并发下保证接口的幂等性

...问题3消息丢失问题4消息顺序问题5消息堆积高并发下如何保证接口幂等性?接口防重设计1insert前先select2加悲观锁3加乐观锁 查看详情

微服务架构如何运作?

...故障。服务发现–查找微服务之间通信路径的指南。内容交付网络–代理服务器及其数据中心的分布式网络。远程服务–启用驻留在IT设备网络上的远程访问信息。 查看详情

关于mq的几件小事如何保证消息队列的高可用

1.RabbitMQ的高可用RabbitMQ基于主从模式实现高可用。RabbitMQ有三种模式:单机模式,普通集群模式,镜像集群模式。(1)单机模式:单机模式就是demo级别的,生产中不会有人使用。(2)普通集群模式普通集群模式就是在多台机器... 查看详情

如何将繁体中文消息从 Java 发送到 IBM MQ

】如何将繁体中文消息从Java发送到IBMMQ【英文标题】:HowtosendTraditionalchinesecharactermessagefromJavatoIBMMQ【发布时间】:2021-05-0417:59:56【问题描述】:应用范围:从java应用向IBMMQ发送消息,非java大型机应用消费问题:简体中文消息被... 查看详情

mq消息队列(代码片段)

...3消息队列的缺点1.4消息队列比对2、RabbitMQ2.1、RabbitMQ如何保证消息不被重复消费2.2、RabbitMQ如何保证消息不丢失2.2.1生产者丢数据2.2.2消息队列丢数据2.2.3消费者丢数据2.3、RabbitMQ如何保证消息有序2.4、RabbitMQ如何处理消息堆积情况... 查看详情

mq——如何保证消息不会丢失(代码片段)

一条消息从生产到消费完成这个过程,可以划分三个阶段,为了方便描述,我给每个阶段分别起了个名字。生产阶段:在这个阶段,从消息在Producer创建出来,经过网络传输发送到Broker端。存储阶段:在这个阶段,消息在Broker端存... 查看详情