RocketMQ详细解析(一)

分布式消息队列RocketMQ

这篇分布式事务的文章写的比较好,分布式事务一般用于需要数据强一致性的地方,例如会员积分,游戏充值等需要money的地方。

Springboot中用RocketMQ(rocketmq-spring-boot-starter)解决分布式事务问题-CSDN博客

(1)Rocket基础知识解析

一、基本概念

1 消息

消息是指,消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。

2 主题

Topic表示一类消息的集合,每个主体包含若干条消息,每条消息只能属于一主题,是RocketMQ进行消息订阅的基本单位。

一个生产者可以同时发送多种Topic的消息,但是一个消费者只能对某种特定的Topic感兴趣,即只可以订阅和消费一种Topic的消息。

3 标签
4 队列

存储消息的物理实体。一个Topic中可以包含多个Queue,每个Queue中存放的是该Topic的消息。一个Topic的Queue也被称为一个Topic中消息的分区(Partition)。

一个Topic的Queue中的消息只能被一个消费者组中的一个消费者消费。一个Queue中的消息不允许同一个消费者组的多个消费者消费。

5 消息标识

RocketMQ每个消息都有唯一的MessageId,且可以携带具有业务标识的Key,方便对消息的查询。不过需要注意的是MessageId有两个,send()发送消息的时候发送者(producer端)会产生唯一的id(MsgId),消息到达Broker的时候也会产生唯一id(offestMsgId)

offsetMsgId是很容易重复的,但是MsgId重复的概率很低,自己创建的key会用的比较多一点。

二、系统架构

Producer

消息的生产者,负责生产消息。Producer通过MQ的负载均衡模块来选择相应的Broker集群队列进行消息的投递,投递的过程支持快速失败,并且这个过程延迟很低。

举个例子:

  1. 业务系统产生的日志写入到MQ中的过程就是消息生产的过程
  2. 电商平台用户提交的秒杀请求写入到MQ的过程,就是消息生产过程

RocketMQ中的消息产生者都是以生产者组的形式出现的。生产者组就是同一类生产者的集合,这类Producer发送相同的Topic类型的消息。一个生产者组可以同时发送多个Topic的消息。

上面这句话可能比较绕,不会很理解,下面这段话可以解释说明:

我们把一个生产者组里面的生产者实例定义成一个类,不是把一个类的生产者实例划分为一个生产者组。

举个例子:

假设我们是一个电商平台,需要处理订单相关的消息。我们可以定义两个Topic:ORDERORDER_DETAILORDER Topic用于处理订单的基本信息,例如订单号、客户信息等,而**ORDER_DETAIL** Topic用于处理订单的详细信息,例如订单项、商品信息等。

我们可以创建一个生产者组,名为**ORDER_PRODUCER_GROUP,这个组包含多个生产者实例,这些实例分布在不同的机器上。这个生产者组可以发送ORDERORDER_DETAIL**两个Topic的消息。

例如,某个生产者实例可以发送**ORDER** Topic的消息,例如订单号为**10001的订单信息,而另一个生产者实例可以发送ORDER_DETAIL** Topic的消息,例如订单号为**10001**的订单项信息。

这样,ORDER_PRODUCER_GROUP生产者组可以发送多个Topic的消息,包括**ORDERORDER_DETAIL**,从而处理订单相关的业务逻辑。这个例子可以形象地说明生产者组可以发送多个Topic的消息的概念。

在这个例子中,两个生产者实例虽然发送不同的Topic的消息,但是它们都是属于同一类生产者,也就是**ORDER_PRODUCER_GROUP**生产者组的一部分。

尽管它们发送的Topic不同,但是它们都是处理订单相关的业务逻辑的生产者实例。它们之间存在业务逻辑上的关联性,例如订单号为10001的订单信息和订单项信息之间的关联性。

因此,在RocketMQ中,这两个生产者实例可以被视为同一类生产者,属于同一个生产者组ORDER_PRODUCER_GROUP。这两个生产者实例可以分布在不同的机器上,以提高发送消息的性能和可靠性。

Consumer

消息消费者,一个消息消费者会从Broker服务器中获得消息,并对消息进行业务相关处理。Topic是可以一个消费者可以消费多个Topic,一个Topic也可以被多个消费者消费。

上面两种情况的不同是因为消费模式的不同。

Publish-Subscribe模式与Queue模式。

  1. **Publish-Subscribe模式:**多个Consumer可以订阅同一个Topic,每个Counsumer可消费该Topic的所有消息。比如UP主更新视频,推送给所有的粉丝。
  2. **Queue模式:**一个Topic只能被一个Consume
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值