转自 http://blog.csdn.net/fuck__you_/article/details/51527634
1、系统A(扣减托盘)【消息生产者】
2、系统B(扣减押金)【消息消费者】
业务描述:
两套系统,A中扣减托盘,B中对应的要扣减押金;A中托盘归还,B中押金返还
利用消息队列来解决分布式事务过程:
发送方【生产者】:(不关心接收方状态,只需要确定本地OK,消息推送即可)
1、发送的消息首先需要入库(1⃣表结构:【消息ID,内容,相关事务的ID】)
2、执行本地逻辑操作并commit,发送消息(增加延迟处理,超时未发送成功的—>入库(新的异常消息表),开启新线程继续发送,成功则删除异常消息表信息)
到此为止发送成功
接收方【消费者】:(也不关心发送方状态,只需要接收消息,执行本地操作即可)
1、接收的消息也先入库(1⃣表结构同上)
2、开启新线程处理消息,确保消息一定能执行成功
线程均使用ThreadPoolExecutor线程池
1⃣处的好处:
1、消息内容本地持久化,如果真的出现什么问题,便于双方排查问题
2、针对接收方来说,可防止消息的重复发送情况
当然这个过程需要确保消息中间件功能完全正常,就算宕机也没有任何影响
本地的逻辑操作和发送消息都可以有超时的判定,但是消息的出队列呢?
下面说下Redis消息队列弊端:
消息从queue里面出来,还未到达消费者前网络中断或者各种原因导致消息丢失,而接受者并不知道有此消息最终导致分布式事务不一致的情况,并且该情况的反应时间有可能是几个月后或者更长时间,排查问题也很麻烦
引入消息队列kafka的优势:
kafka本身的消息支持持久化,消息本身以快照的形式保存在磁盘中(并非redis是在内存中),再加上kafka消息队列的特性—>(并非真正意义上的出队列,而是有类似指针只是指向消息的消费情况,即永远指向下一个待消费信息,消息还是在队列中存在,而客户端可以手动控制消息是否被成功消费),这点已经足以可以用kafka来取代原生的redis消息队列,在加上kafka与zookeeper无缝集成,可以在zookeeper中可以很好的监控kafka的brokers(存放消息的仓库)、topics(消息的主题)、partitions(仓库里面的分区)以及指针的offset(偏移量,即消息的消费情况)
最后kafka的吞吐量和集群方式都比redis更优秀(其他的消息队列大家也都可以了解了解)
动手玩玩去!~
根据下面的文章有感而发:(里面这货是大牛)
相关推荐
项目使用了多种技术栈,包括Spring Boot、Kafka、ActiveMQ、Redis等,实现了高效的消息处理和分布式事务管理。 适用人群 后端开发工程师 分布式系统架构师 对消息队列和分布式事务感兴趣的开发者 使用场景及...
本话题主要聚焦于如何利用Redis来构建一个简单的消息队列,适用于对事务一致性和高可用性要求不那么严格的服务间通信场景。 Redis是一个高性能的键值存储系统,其数据结构丰富,可以支持多种操作,如字符串、哈希、...
总结来说,分布式事务中使用消息队列是实现系统解耦和高并发处理的有效手段,但需要权衡其带来的不确定性和延迟问题。在实际应用中,根据项目需求选择适当的MQ工具,如ActiveMQ、Kafka或Redis,是实现高效、可靠...
Redis,全称Remote Dictionary Server,是一款高性能的键值存储系统,常被用于数据库、缓存和消息中间件等场景。在面试中,Redis的消息队列功能是经常被提及的话题,因为它在分布式系统中的作用至关重要。本文将深入...
Kafka是业界广泛使用的分布式流处理平台,而Redis则是一款高性能的内存数据结构存储系统,常用于缓存、消息队列等场景。 Kafka是由LinkedIn开发并贡献给Apache软件基金会的开源项目,它的主要功能包括发布/订阅消息...
数据结构、算法、Redis、Kafka、MongoDB以及Spring和Zookeeper是计算机科学和技术领域中的核心组成部分,尤其在Java开发中扮演着至关重要的角色。这些技术涵盖了基础理论、分布式系统、数据库管理和中间件等多个方面...
总的来说,`spring-boot+kafka+hibernate+redis`的组合为开发人员提供了一套强大的工具,可用于构建复杂、高性能的微服务架构,实现数据的实时处理、高效存储和快速访问。通过深入理解和实践,开发者可以更好地掌握...
4. **队列**:在抢单过程中,为了避免瞬间大量请求导致服务器压力过大,可以引入消息队列(如RabbitMQ或Kafka),将用户请求暂存到队列中,然后按照一定的策略(如FIFO,即先进先出)依次处理。这样可以平滑系统负载...
在这个场景中,我们关注的是五个关键组件:Redis、Elasticsearch、Kafka、MySQL和MongoDB。下面将分别详细介绍这五者的核心特性、用途以及它们如何协同工作。 **Redis** Redis是一个开源的内存数据结构存储系统,常...
理解2PC(两阶段提交)、TCC(尝试、确认、补偿)等分布式事务解决方案,并根据实际场景选择合适的策略,是解决复杂分布式系统问题的关键。 这些知识涵盖了软件开发的多个重要领域,对于提升个人技能和解决实际问题...
3. **Redis**: Redis是一个高性能的键值数据库,常被用作缓存和消息队列。在监控系统中,Redis可以用于存储短期的快照数据,或者作为Prometheus的Pushgateway,允许短暂的metrics被推送到Redis,然后由Prometheus...
书中可能涵盖了Redis在Web开发、缓存服务、消息队列、实时统计等多种实际应用场景的案例分析,帮助读者更好地理解如何在项目中利用Redis。 八、Redis与其他技术的整合 Redis可以轻松地与其他技术集成,如与Spring...
Redis,一个高性能的键值数据存储系统,常用于缓存和消息队列等场景,由于其数据读写速度快,被广泛应用于高并发环境。然而,当多个客户端同时对同一个键进行操作时,可能会引发并发竞争问题,导致数据不一致或者...
1. **全面应用**:首先需要构建完整的客户端环境(包括Producer和Consumer),并通过引入相应的jar包来集成消息队列。接下来逐步启用消息队列的所有功能,优化现有代码结构,逐步实现系统间解耦。随着对消息队列理解...
MetaQ 和 RocketMQ 是阿里巴巴开源的分布式消息系统,支持分布式事务。 总之,Kafka 以其高效、可靠和分布式的特点,成为了大数据时代实时数据处理的关键组件。无论是实时监控、日志收集还是数据集成,Kafka 都能...
**基于 Springboot + Redis + Kafka 的秒杀系统** 在现代电商系统中,秒杀活动是一...乐观锁保证了数据一致性,Redis 缓存减轻了数据库压力,Kafka 实现了异步处理和限流,整体设计考虑了高并发场景下的性能和可用性。
Redis缓存、消息中间件、队列以及非对称式加密是现代软件系统中的关键组件,它们在构建高性能、安全的分布式应用中扮演着重要角色。 Redis是一个内存数据存储系统,常被用作缓存,它能显著提高数据读取速度。Redis...
3. **Redis**: Redis是一个高性能的键值存储系统,常用于缓存和消息队列。了解其数据类型(如String、Hash、List、Set、Sorted Set),以及发布/订阅、事务和持久化机制。 4. **Kafka**: Kafka是一个高吞吐量的...
本项目基于 Springboot、Redis 和 Kafka 构建了一个完整的秒杀系统,利用了乐观锁、缓存、限流和异步处理等技术来提升系统的性能和用户体验。下面将详细解释这些技术及其在秒杀系统中的应用。 1. **Springboot**: ...