1 0

可靠MQ设计5

各位,

我们团队在可靠MQ的设计上,出现了一些分歧性的意见,想拿出来和大家讨论讨论:

1,消息的可靠性设计,目前有2种模式:模式1是采用Notify的方式,先发送半消息,业务操作成功后最后提交完整消息,同时提供业务操作的检查接口,这种模式实现消息的最终一致性;模式2将业务数据和消息数据先都存在业务数据库里面,通过数据库的事务保证一致性,随后将消息转发给MQ。模式1的缺点是业务侵入性高,方案比较复杂,需要重新实现;模式2的缺点是消息数据可能会散落在各个地方,包括业务系统,而且可以集成现有MQ。

2,消息去重设计,也有2种模式:模式1是消费者根据自己的业务实现去重,模式2是在消费者端增加一个数据库表专门记录已经消费过的消息,不需要消费者根据业务去做去重。

不知道大家怎么看?

问题补充:可靠性设计模式2的好处是可以集成现有的MQ方案,而不是缺点。
MQ 
2013年6月04日 14:16

3个答案 按时间排序 按投票排序

0 0

采纳的答案

看Notify这个词我就知道又是蛋疼的淘系同学。
方案1、各种Check让人很蛋疼,但如果内部是需要垮库事务、分布式调用的场景的,我还真离不开他。让我可以在Check接口中回滚垮库、冲正其他系统的数据。


方案2、简单,非常适合事务都集中在一个库上的业务系统。后端挂上精卫拉binlog还是杠杠的,而且还和业务数据保持一个事务,清爽!

所以,两个我都要。done。

2013年6月05日 00:03
0 0

说实在的,2个方案我都没有看懂,但就我的观点提供一点建议。

问题1,可靠性设计,这个问题如果转换一下,假设你问的不是MQ,而是数据库,就成了“数据库的可靠性设计”,如果你是在开发一个数据库,那是一个严肃的问题,如果你是在使用数据库,那可能是搞错方向了,换成“怎么使用事务保证数据的可靠性”之类的,可能更确切。MQ产品,据我所知,其本身而言,和数据库一样,对交给它的消息也需要提供可靠性保证,当然如果你把MQ的消息存储配成存在内存中,或不用事务提交,那就不保证了,就像你操作数据库的时候不用事务一样。

问题2,去重,据我所知,MQ除了要保证一条消息一定要送达外(即问题1),还要保证只被消费一次(当然,如果你愿意,也可以消费多次),如果你说的去重是指一条消息可能会被收到多次(从你的方案2推测的),那应该先好好了解一下MQ;如果是指业务上本身就会有重复内容的消息,那当然只能在业务上去处理了,就像数据库里,你可以主键都不要,插入内容完全相同的数据行,至于能不能重复,或重复的怎么处理,那完全上业务上的问题了。


在MQ环境里,一条消息无非是经过:生产(发送)、存储转发、消费(接收)三个环节,MQ在每个环节都需要提供可靠性保证,如向MQ发送一条消息,那到底有没有发出去,要有明确的回馈,就像向数据库里插入一条记录,到底有没有插进去,必须通过事务的成功或失败明确的回馈给客户端,这样的可靠性保证,应该通过数据库、MQ自身的机制来实现,而不能转移的应该层面。存储转发就不用说了,肯定不能一条消息莫名其妙的消失掉,也不能凭空多出消息来。消费的时候也是一样,一条消息到底有没有被消费掉,也是通过事务机制来控制的,不可能一条消息被消费掉了,下次去取又来了,不然这个MQ产品就是不可用的(当然你不发送ACK,故意让它留在broker上除外)

2013年6月04日 19:06
0 0

支持模式2

2013年6月04日 18:00

相关推荐

    MQ,websphere mq

    通过阅读这些书籍,开发者和系统管理员可以掌握WebSphere MQ的全面知识,从而更好地设计、实施和维护基于MQ的消息传递系统。结合实际项目经验,可以提升解决复杂系统集成问题的能力,为企业信息系统提供高效、可靠的...

    IBM WebSphere MQ 安装包

    3. **版本信息**:这里提供的安装包为WS_MQ_V7.5.0.2_TRIAL_FOR_WINDOWS_ML,表明这是WebSphere MQ的7.5.0.2试用版,专为Windows平台设计。"ML"通常代表“Multilingual”,意味着该版本支持多语言。 4. **安装与...

    IBM MQ Explore windows下安装包

    IBM MQ Explore是一款强大的工具,专为管理IBM WebSphere MQ(以前称为IBM Message Queuing或IBM MQ)环境而设计。在Windows环境下安装IBM MQ Explorer,可以帮助系统管理员和开发人员监控、配置和管理IBM MQ队列...

    C++源代码《用ACE实现可靠消息传送》MQServer.exe、MQClient程序小实例

    本文将深入探讨如何使用ACE(Adaptive Communication Environment)库来实现这一功能,同时以"C++源代码《用ACE实现可靠消息传送》MQServer.exe、MQClient程序小实例"为例进行详细解析。 ACE是一个跨平台的C++框架...

    Websphere MQ资料集合(包含精通mq、mq java编程、mq编程模式、mq for linux等)

    5. **MQ编程模式**:探索各种MQ编程模式,如同步和异步消息处理,以及如何设计高效、健壮的MQ应用。 6. **故障排查与性能优化**:学习如何诊断MQ相关的问题,以及如何调整MQ配置以提高性能和可扩展性。 7. **安全...

    MQ测试器-MQ分析

    MQ测试器是专门针对这种技术设计的工具,其主要目的是为了确保MQ系统的稳定性和高效性。本篇文章将深入探讨MQ测试器的功能、应用场景以及如何进行模拟发送和接收操作。 1. **MQ测试器的功能** MQ测试器的主要功能...

    JMETER插件,进行IBM MQ测试

    JMeter IBM MQ插件,正如标题所示,是专为在JMeter中进行IBM MQ测试设计的。这个插件使开发者和测试人员能够方便地模拟MQ消息的发送和接收,从而评估系统的性能和稳定性。以下是该插件的主要功能和使用方法: 1. **...

    MQ2传感器模块原理图及PCB.rar

    在PCB设计中,设计师会考虑信号路径的布线、元器件之间的距离、电源分布、抗干扰措施等因素,以确保模块的可靠性和性能。通过查看PCB设计,我们可以学习如何优化空间利用,减少电磁干扰,以及如何正确地为敏感元件...

    MQ最佳实践_MQ_

    本最佳实践将深入探讨MQ的关键概念、设计原则和实际应用场景,旨在帮助开发者优化其MQ系统的性能和稳定性。 1. **消息队列的基本概念** - **消息**: 在MQ中,消息是数据的载体,用于在生产者和消费者之间传输信息...

    MQ传感器接法

    MQ系列传感器是广泛应用于气体检测的一种传感器,它们主要用于检测环境中特定气体的存在和浓度。...在设计项目时,务必考虑传感器的环境适应性、稳定性以及长期使用的漂移问题,以确保系统的准确性和可靠性。

    Altium Designer MQ-2的封装

    在这个特定的案例中,"MQ-2的封装"指的是MQ-2烟雾传感器的PCB封装设计,这是Altium Designer中的一个重要概念。 封装在PCB设计中扮演着至关重要的角色,它是实际电子元件在电路板上的物理表示,包括元件的外形、...

    IBM MQ异常 关闭原因

    IBM MQ 是一种基于消息队列的中间件,提供了高效、可靠的消息传递机制。然而,在实际应用中,MQ queue manager 可能会出现异常关闭的情况,导致消息传递中断。本文将详细分析 MQ 异常关闭的原因,并提供相应的解决...

    MQ-2可燃气体及烟雾传感器模块.zip_MQ2

    在提供的资料中,"3 MQ-2可燃气体及烟雾传感器模块 20121020"可能包含了MQ-2传感器模块的详细规格、电路设计、应用实例以及C51单片机的程序代码。这些文档可以帮助开发者理解如何正确连接和配置传感器,编写控制程序...

    MQ7一氧化碳传感器资料

    总的来说,MQ7一氧化碳传感器是一款实用的气体检测工具,它的有效运用需要理解其工作原理,熟悉电路设计,以及掌握正确的数据处理和维护方法。通过提供的资料,你将能够全面地了解这款传感器,从而在实际项目中实现...

    9.2.1.0-IBM-MQ-Explorer-Win64.zip(支持7.0之后)

    这个9.2.1.0版本是专为IBM Message Queuing (MQ) 7.0及更高版本设计的,它提供了图形用户界面,使得MQ的配置、管理和监控变得更加直观和便捷。 IBM MQ,原名WebSphere MQ,是IBM的一款企业级消息队列系统,用于在...

    IBM.MQ.pdf

    IBM.MQ(以前称为WebSphere MQ)是IBM开发的一款消息中间件产品,用于在分布式应用程序之间实现可靠的消息传递。它提供了一个消息队列管理的框架,允许不同平台、网络和应用程序之间进行通信。 ### 使用COM接口与...

    WebSphere MQ 系统管理指南 6.0

    总之,《WebSphere MQ 系统管理指南 6.0》不仅是一份技术手册,更是IT团队在设计、部署和维护基于WebSphere MQ的消息传递解决方案时不可或缺的伙伴。它提供了深入的理论知识、实用的操作指南和先进的策略建议,帮助...

    IBM WebSphere MQ的使用

    了解以上知识点后,开发者能够有效地利用IBM WebSphere MQ进行分布式系统中的消息传递,构建可靠、高效的企业级应用。在实际项目中,还需要根据具体需求进行详细设计和配置,以满足业务的复杂性和灵活性。

    MQ java 编程指南

    对于分布式系统的设计,书中有专门的章节讨论如何利用MQ实现微服务间的通信,包括事件驱动架构、发布/订阅模式以及点对点模型。这部分内容有助于开发者构建高可用、可扩展的应用架构。 为了确保代码的健壮性,书中...

    STM32F103C8T6MQ&DHT11;整合

    STM32F103C8T6是意法半导体(STMicroelectronics)推出...通过这个项目,开发者不仅可以掌握STM32F103C8T6的基本操作,还能学习到传感器驱动、数据处理和实时报警系统的设计,这对于提升嵌入式系统的开发能力大有裨益。

Global site tag (gtag.js) - Google Analytics