RocketMq 主题(TOPIC)

RocketMq是阿里出品(基于MetaQ)的开源中间件,已捐赠给Apache基金会并成为Apache的顶级项目。基于java语言实现,十万级数据吞吐量,ms级处理速度,分布式架构,功能强大,扩展性强。

官方文档

Linux 安装 RocketMq-CSDN博客

Springboot 集成 RocketMq(入门)-CSDN博客

1.定义

主题是 RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。 主题的作用主要如下:

1.1 定义数据的分类隔离

RocketMQ 建议将不同业务类型的数据拆分到不同的主题中管理,通过主题实现存储的隔离性和订阅隔离性。

1.2 定义数据的身份和权限

RocketMQ 的消息本身是匿名无身份的,同一分类的消息使用相同的主题来做身份识别和权限关理。

2.模型关系

主题是 RocketMQ 的顶层存储,所有消息资源的定义都在主题内部完成,但主题是一个逻辑概念,并不是实际的消息容器。

主题内部由多个队列组成,消息的存储和水平扩展能力最终是由队列实现的;并且针对主题的所有约束和属性设置,最终也是通过主题内部的队列来实现。

3.内部属性

3.1 主题名称

定义:主题的名称,用于标识主题,主题名称集群内全局唯一。


3.2 队列列表

定义:队列作为主题的组成单元,是消息存储的实际容器,一个主题内包含一个或多个队列,消息实际存储在主题的各队列内。

写队列:发送消息时根据写队列数量返回路由信息。

读队列:消费时按照读队列的个数返回路由信息。

3.3 消息类型

定义:主题所支持的消息类型。

Normal:普通消息。
FIFO:顺序消息。
Delay:定时/延时消息。
Transaction:事务消息.

约束:RocketMQ 从5.0版本开始,支持强制校验消息类型,即每个主题只允许发送一种消息类型的消息,这样可以更好的运维和管理生产系统,避免混乱。为保证向下兼容4.x版本行为,强制校验功能默认关闭,推荐通过服务端参数 enableTopicMessageTypeCheck 开启校验。

4.主题的类型

普通主题:这里的topic是用户创建主题。

重试主题:这里的topic是消息发送失败时候系统为之创建的主题。

死信主题:这里的topic类似垃圾箱,无法从中生产或者消费消息。

系统主题:这里的topic是Brocker启动后就自动生成的主题。

5.生产中使用建议

5.1 关闭自动创建主题的功能

主题属于顶层资源和容器,拥有独立的权限管理、可观测性指标采集和监控等能力,创建和管理主题会占用一定的系统资源。因此,生产环境需要严格管理主题资源,请勿随意进行增、删、改、查操作。

5.2 手动控制台创建

5.2.1 队列

当读队列数量 >= 写队列数量业务可以正常进行。

当读队列数量 写队列数量效果最佳

如果想调整读写队列的数量,首先减少写队列数量再减少读队列的数量(确保已读完)。

假设创建了4个写队列2个读队列则有两个队列的消息无法被消费,反之则存在两个空闲的读队列。

RocketMq不直接将读写队列设置相同直接目的是为了安全的收缩队列数量,间接的为了安全的扩容。

5.2.2 perm

6:读写状态,当前队列允许读取消息和写入消息。

4:只读状态,当前队列只允许读取消息,不允许写入消息。

2:只写状态,当前队列只允许写入消息,不允许读取消息。

0:不可读写状态,当前队列不允许读取消息和写入消息。

5.3 单一主题只收发一种类型消息

主题的设计原则为通过主题隔离业务,不同业务逻辑的消息建议使用不同的主题。同一业务逻辑消息的类型都相同,因此,对于指定主题,应该只收发同一种类型的消息。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值