-
可靠MQ设计5
各位,
我们团队在可靠MQ的设计上,出现了一些分歧性的意见,想拿出来和大家讨论讨论:
1,消息的可靠性设计,目前有2种模式:模式1是采用Notify的方式,先发送半消息,业务操作成功后最后提交完整消息,同时提供业务操作的检查接口,这种模式实现消息的最终一致性;模式2将业务数据和消息数据先都存在业务数据库里面,通过数据库的事务保证一致性,随后将消息转发给MQ。模式1的缺点是业务侵入性高,方案比较复杂,需要重新实现;模式2的缺点是消息数据可能会散落在各个地方,包括业务系统,而且可以集成现有MQ。
2,消息去重设计,也有2种模式:模式1是消费者根据自己的业务实现去重,模式2是在消费者端增加一个数据库表专门记录已经消费过的消息,不需要消费者根据业务去做去重。
不知道大家怎么看?
问题补充:可靠性设计模式2的好处是可以集成现有的MQ方案,而不是缺点。2013年6月04日 14:16
3个答案 按时间排序 按投票排序
-
采纳的答案
看Notify这个词我就知道又是蛋疼的淘系同学。
方案1、各种Check让人很蛋疼,但如果内部是需要垮库事务、分布式调用的场景的,我还真离不开他。让我可以在Check接口中回滚垮库、冲正其他系统的数据。
方案2、简单,非常适合事务都集中在一个库上的业务系统。后端挂上精卫拉binlog还是杠杠的,而且还和业务数据保持一个事务,清爽!
所以,两个我都要。done。2013年6月05日 00:03
-
说实在的,2个方案我都没有看懂,但就我的观点提供一点建议。
问题1,可靠性设计,这个问题如果转换一下,假设你问的不是MQ,而是数据库,就成了“数据库的可靠性设计”,如果你是在开发一个数据库,那是一个严肃的问题,如果你是在使用数据库,那可能是搞错方向了,换成“怎么使用事务保证数据的可靠性”之类的,可能更确切。MQ产品,据我所知,其本身而言,和数据库一样,对交给它的消息也需要提供可靠性保证,当然如果你把MQ的消息存储配成存在内存中,或不用事务提交,那就不保证了,就像你操作数据库的时候不用事务一样。
问题2,去重,据我所知,MQ除了要保证一条消息一定要送达外(即问题1),还要保证只被消费一次(当然,如果你愿意,也可以消费多次),如果你说的去重是指一条消息可能会被收到多次(从你的方案2推测的),那应该先好好了解一下MQ;如果是指业务上本身就会有重复内容的消息,那当然只能在业务上去处理了,就像数据库里,你可以主键都不要,插入内容完全相同的数据行,至于能不能重复,或重复的怎么处理,那完全上业务上的问题了。
在MQ环境里,一条消息无非是经过:生产(发送)、存储转发、消费(接收)三个环节,MQ在每个环节都需要提供可靠性保证,如向MQ发送一条消息,那到底有没有发出去,要有明确的回馈,就像向数据库里插入一条记录,到底有没有插进去,必须通过事务的成功或失败明确的回馈给客户端,这样的可靠性保证,应该通过数据库、MQ自身的机制来实现,而不能转移的应该层面。存储转发就不用说了,肯定不能一条消息莫名其妙的消失掉,也不能凭空多出消息来。消费的时候也是一样,一条消息到底有没有被消费掉,也是通过事务机制来控制的,不可能一条消息被消费掉了,下次去取又来了,不然这个MQ产品就是不可用的(当然你不发送ACK,故意让它留在broker上除外)2013年6月04日 19:06
相关推荐
* WebSphere MQ 解决方案的优势:WebSphere MQ 是一种成熟的解决方案,具有高效、可靠和灵活等特点,满足企业的集成需求。 * IBM 的技术优势:IBM 是一家技术领先的公司,具有丰富的技术经验和资源,能够提供高质量...
3. **版本信息**:这里提供的安装包为WS_MQ_V7.5.0.2_TRIAL_FOR_WINDOWS_ML,表明这是WebSphere MQ的7.5.0.2试用版,专为Windows平台设计。"ML"通常代表“Multilingual”,意味着该版本支持多语言。 4. **安装与...
通过阅读这些书籍,开发者和系统管理员可以掌握WebSphere MQ的全面知识,从而更好地设计、实施和维护基于MQ的消息传递系统。结合实际项目经验,可以提升解决复杂系统集成问题的能力,为企业信息系统提供高效、可靠的...
本文将深入探讨如何使用ACE(Adaptive Communication Environment)库来实现这一功能,同时以"C++源代码《用ACE实现可靠消息传送》MQServer.exe、MQClient程序小实例"为例进行详细解析。 ACE是一个跨平台的C++框架...
IBM MQ Explore是一款强大的工具,专为管理IBM WebSphere MQ(以前称为IBM Message Queuing或IBM MQ)环境而设计。在Windows环境下安装IBM MQ Explorer,可以帮助系统管理员和开发人员监控、配置和管理IBM MQ队列...
5. **MQ编程模式**:探索各种MQ编程模式,如同步和异步消息处理,以及如何设计高效、健壮的MQ应用。 6. **故障排查与性能优化**:学习如何诊断MQ相关的问题,以及如何调整MQ配置以提高性能和可扩展性。 7. **安全...
MQ测试器是专门针对这种技术设计的工具,其主要目的是为了确保MQ系统的稳定性和高效性。本篇文章将深入探讨MQ测试器的功能、应用场景以及如何进行模拟发送和接收操作。 1. **MQ测试器的功能** MQ测试器的主要功能...
MQ137氨气检测模块是一款广泛应用于环境监测和安全防护领域的...通过以上信息,开发者可以全面了解MQ137氨气检测模块,并结合STM32开发出可靠的气体监测系统,确保在各种环境条件下准确、及时地获取氨气浓度数据。
JMeter IBM MQ插件,正如标题所示,是专为在JMeter中进行IBM MQ测试设计的。这个插件使开发者和测试人员能够方便地模拟MQ消息的发送和接收,从而评估系统的性能和稳定性。以下是该插件的主要功能和使用方法: 1. **...
5. **长期稳定性和快速响应**:设计具备长时间的使用寿命和快速响应恢复特性,确保了传感器的可靠性能。 在实际应用中,MQ-4传感器通常需要进行预热和校准。预热大约需要20秒,然后通过调节电位器来设置基准,以...
在PCB设计中,设计师会考虑信号路径的布线、元器件之间的距离、电源分布、抗干扰措施等因素,以确保模块的可靠性和性能。通过查看PCB设计,我们可以学习如何优化空间利用,减少电磁干扰,以及如何正确地为敏感元件...
本最佳实践将深入探讨MQ的关键概念、设计原则和实际应用场景,旨在帮助开发者优化其MQ系统的性能和稳定性。 1. **消息队列的基本概念** - **消息**: 在MQ中,消息是数据的载体,用于在生产者和消费者之间传输信息...
MQ系列传感器是广泛应用于气体检测的一种传感器,它们主要用于检测环境中特定气体的存在和浓度。...在设计项目时,务必考虑传感器的环境适应性、稳定性以及长期使用的漂移问题,以确保系统的准确性和可靠性。
在这个特定的案例中,"MQ-2的封装"指的是MQ-2烟雾传感器的PCB封装设计,这是Altium Designer中的一个重要概念。 封装在PCB设计中扮演着至关重要的角色,它是实际电子元件在电路板上的物理表示,包括元件的外形、...
IBM MQ 是一种基于消息队列的中间件,提供了高效、可靠的消息传递机制。然而,在实际应用中,MQ queue manager 可能会出现异常关闭的情况,导致消息传递中断。本文将详细分析 MQ 异常关闭的原因,并提供相应的解决...
在提供的资料中,"3 MQ-2可燃气体及烟雾传感器模块 20121020"可能包含了MQ-2传感器模块的详细规格、电路设计、应用实例以及C51单片机的程序代码。这些文档可以帮助开发者理解如何正确连接和配置传感器,编写控制程序...
总的来说,MQ7一氧化碳传感器是一款实用的气体检测工具,它的有效运用需要理解其工作原理,熟悉电路设计,以及掌握正确的数据处理和维护方法。通过提供的资料,你将能够全面地了解这款传感器,从而在实际项目中实现...
IBM.MQ(以前称为WebSphere MQ)是IBM开发的一款消息中间件产品,用于在分布式应用程序之间实现可靠的消息传递。它提供了一个消息队列管理的框架,允许不同平台、网络和应用程序之间进行通信。 ### 使用COM接口与...
IBM MQ 7.5.0是该产品的特定版本,专为Windows操作系统设计。这个版本包含了所有必要的组件和工具,用户只需一次性下载即可开始使用,无需额外安装或配置,这大大简化了部署流程。 IBM MQ的核心功能是提供可靠的...
这个9.2.1.0版本是专为IBM Message Queuing (MQ) 7.0及更高版本设计的,它提供了图形用户界面,使得MQ的配置、管理和监控变得更加直观和便捷。 IBM MQ,原名WebSphere MQ,是IBM的一款企业级消息队列系统,用于在...