前言现在开发项目都是基于SpringBoot,新项目很少使用Spring,所以我们学习一门技术除了要会原生API,还不得不考虑和SpringBoot集成,本篇文章为SpirngBoot整合RocketMQ案例SpringBoot集成RocketMQ导入依赖这里使用整合RocketMQ的基础依赖:rocketmq-spring-boot-starter<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifa
概述如果业务只涉及到一个数据库的写操作,我们只需要保证这一个事物的提交和回滚,这种事务管理叫传统事物或本地事务,如果业务涉及到多个数据库(多个服务)的写操作,我们需要保证多个数据库同时提交或回滚,这种夸多个数据库的事务操作叫分布式事务。分布式事物的解决方案有很多,如:2PC,TCC,最终一致性,最大努力通知等等。这里要介绍的是基于RocketMQ事务消息的最终一致性方案分布式事务用户注册成功,向用户数据库保存用户信息,同时通过远程调用积分服务为用户赠送积分,模型如下:我们需要使用分布式事务管理实现用户数据库和积分数据库的一致性。即:用户保存成功,用户的积分也要保存成功,或者都回滚不做任何存储。
使用场景如果消息过多,每次发送消息都和MQ建立连接,无疑是一种性能开销,批量消息可以把消息打包批量发送,批量发送消息能显著提高传递小消息的性能。批量消息概述批量发送消息能显著提高传递小消息的性能。限制是这些批量消息应该有相同的topic,而且不能是延时消息。此外,这一批消息的总大小不应超过4MB,如果超过可以有2种处理方案:1.将消息进行切割成多个小于4M的内容进行发送2.修改4M的限制改成更大可以设置Producer的maxMessageSize属性修改配置文件中的maxMessageSize属性对于消费者而言Consumer的MessageListenerConcurrently监听接口的
使用场景我们通常使用定时任务比如Quartz来解决超时业务,比如:订单支付超时关单,VIP会员超时提醒。但是使用定时任务来处理这些业务场景在数据量大的时候并不是一个很好的选择,会造成大量的空扫描浪费性能。我们可以考虑使用延迟消息来解决。概述延迟消息即:把消息写到Broker后需要延迟一定时间才能被消费,在RocketMQ中消息的延迟时间不能任意指定,而是由特定的等级(1到18)来指定,分别有:messageDelayLevel=1s5s10s30s1m2m3m4m5m6m7m8m9m10m20m30m1h2h可以通过修改配置来增加级别,比如在mq安装目录的broker.conf文件中增加如:m
前言在某些业务场景下是需要消息按照顺序进行消费,比如一个账户的加钱,减钱的动作必须按照时间先后去执行,否则就会发生金额不够导致操作失败。顺序消息故名知意就是消息按照发送的顺序进行消费,队列本身是一种先进先出的数据结构,而RocketMQ理论上说也遵循这种机制。但是默认生产者以RoundRobin轮询方式把消息发送到不同的Queue分区队列;消费者从多个队列中消费消息,这种情况没法保证顺序。所以在RocketMQ中如何保证消息顺序呢?全局有序消息在RocketMQ中消息分为全局有序和局部有序消息,全局有序是一个topic下的所有消息都要保证顺序,如果要保证消息全局顺序消费,就需要保证使用一个队列
前言RocketMQ已经写了两章了,一章是RocketMQ认识和安装,一章是RocketMQ的工作流程和核心概念,本章我们开始使用RocketMQ来发送和接收消息。RocketMQ的消息种类非常多,比如:普通消息,顺序消息,延迟消息,批量发送,消息过滤等等。本篇文章来探讨一下普通消息的发送普通消息发送普通消息这里介绍三种发送方式,同步发送,异步发送,单向发送。我们先导入需要的依赖,版本尽量和RocketMQ的安装版本一致。<dependencies><dependency><groupId>org.apache.rocketmq</groupId>
前言本篇文章我们来一起来探讨一下RocketMQ的工作原理和一些核心概念,参考:RocketMQ开发官方文档:https://github.com/apache/rocketmq/blob/master/docs/cn/RocketMQ_Example.mdRocketMQ的架构RocketMQ的集群架构如下(图片来源于官网)RocketMQ架构上主要分为四部分,如上图所示Producer消息发布的角色,支持分布式集群方式部署。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。Consumer消息消费的角色,支持分布式集群方式部
前言最近挺忙的,好久没更新文章了,最近在搞RocketMQ,那就先发点这个,Netty的文章等我空了再继续更。一.MQ概述1.MQ是什么MQ全称为MessageQueue,即消息队列,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程的软件系统,遵循FIFO原则。在高并发的分布式系统中使用居多。2.为什么用MQ为什么要使用MQ,我从生活中发现的一个例子来举例说明,即:天府通刷地铁出站的时候不是立马扣费,而是提示“出站成功,费用将会在稍后结算”,我们假设天府通后台扣费流程如下:【注意】假如天府通出站API和支付系统是不同的子系统(两个子系统远程通信)上下班高