消息中间件是分布式系统中的重要组件,在实际工作中常用消息中间件进行系统间数据交换,从而解决应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性架构。目前市面上可供选择的消息中间件有RabbitMQ、ActiveMQ、Kafka、RocketMQ、ZeroMQ、MetaMQ等。本书结合作者近年来在实际项目中使用消息中间件的经历和踩过的一些坑总结整理而成,主要介绍消息中间件使用的背景、基本概念,以及常用的四种消息中间件产品在各个业务场景中的使用案例。作为案例介绍,虽然不能对各种消息中间件产品的所有特性做详细说明,但是希望读者可以通过每章中的案例讨论和实践建议得到启发,为在实际工作中进行产品选型、业务场景方案制定、性能调整等提供思路。
倪炜,网名为“预流”,具有多年一线开发经验和技术团队管理经验,曾参与电信行业、电商行业多个核心系统的建设,在计算机语言、并发编程、分布式系统设计等领域积累了丰富的经验,先后在浪潮、亚信、苏宁、阿里巴巴等通信和互联网企业任职,现为阿里巴巴技术专家。
消息队列在大型分布式系统中具有丰富的应用场景。例如,系统间需要解耦,一个系统发布消息,多个系统订阅消费消息,消息生产者并不需要知道消费方是谁。在高并发场景下,比如秒杀活动,短时间内会发起大量请求,为应对瞬时请求,如果部署大量的机器来处理请求,秒杀活动结束后流量很低,则会浪费很多资源,增加成本,而使用消息队列的堆积能力,先保存请求,再匀速处理请求,则会很好地解决此类问题。书中从不同角度细致地讲解了各种消息中间件,读者可以结合场景,从高可用性、可扩展性、伸缩性、消息堆积能力等方面选择符合自己需求的中间件。倪炜是一位有着技术情怀的人,读者一定会从书中收获多多。 ——吕绪文,美团技术专家 该书较为深入地阐述了消息中间件的原理,且横向对比了各成熟消息中间件及其适用场景。语言风格较为朴实接地气,各种范例恰到好处,比较利于接受,一口气从头读到尾。 ——阿里巴巴技术专家孙中伟 作为系统间异步解耦和通信的一种工具,消息队列在业务中得到了广泛的应用,开源的消息队列各有优缺点,有些强调高性能,有些支持事务消息。本书详细介绍了各种消息队列的基本功能,以及实践建议,对于大家做技术选型和实际工作中更好的使用消息队列提供了重要指导和参考。 ——《分布式框架原理与实践》作者李林锋
第1章 消息队列1.1 系统间通信技术介绍1.2 为何要用消息队列1.3 消息队列的功能特点1.4 设计一个简单的消息队列1.4.1 消息处理中心1.4.2 客户端访问第2章 消息协议2.1 AMQP2.2 MQTT2.3 STOMP2.4 XMPP2.5 JMS第3章 RabbitMQ3.1 简介3.2 工程实例3.2.1 Java访问RabbitMQ实例3.2.2 Spring整合RabbitMQ3.2.3 基于RabbitMQ的异步处理3.2.4 基于RabbitMQ的消息推送3.3 RabbitMQ实践建议3.3.1 虚拟主机3.3.2 消息保存3.3.3 消息确认模式3.3.4 消费者应答3.3.5 流控机制3.3.6 通道3.3.7 总结第4章 ActiveMQ4.1 简介4.2 工程实例4.2.1 Java访问ActiveMQ实例4.2.2 Spring整合ActiveMQ4.2.3 基于ActiveMQ的消息推送4.2.4 基于ActiveMQ的分布式事务4.3 ActiveMQ 实践建议4.3.1 消息转发模式4.3.2 消息积压4.3.3 消息事务4.3.4 消息应答模式4.3.5 消息发送优化4.3.6 消息消费优化4.3.7 消息协议4.3.8 消息持久化第5章 Kafka5.1 简介5.2 工程实例5.2.1 Java访问Kafka实例5.2.2 Spring整合Kafka5.2.3 基于Kafka的用户行为数据采集5.2.4 基于Kafka的日志收集5.2.5 基于Kafka的流量削峰5.3 Kafka实践建议5.3.1 分区5.3.2 复制5.3.3 消息发送5.3.4 消费者组5.3.5 消费偏移量第6章 RocketMQ6.1 简介6.2 工程实例6.2.1 Java访问RocketMQ实例6.2.2 Spring整合RocketMQ6.2.3 基于RocketMQ的消息顺序处理6.2.4 基于RocketMQ的分布式事务6.3 RocketMQ实践建议6.3.1 消息重试6.3.2 消息重复6.3.3 集群6.3.4 顺序消息6.3.5 定时消息6.3.6 批量发送消息6.3.7 事务消息