文章目录
一、背景和思路
由于漏洞或者其他原因,公司有时候考虑是否中间件替换或者升级,这种业务场景下,可能会需要梳理当前几十个项目中全部使用比如kafka、RocketMQ等情况,以及topic等信息/是否使用了RocketMQ的一些特性等等。
代码中可能有,配置文件比如Nacos里也可能有配置,所以可能需要检查代码库和配置中心。
这个问题看起来有点复杂,但可以分步骤来解决:
- 列出所有项目组的服务。
- 检查每个服务的依赖,确认是否使用了RocketMQ或Kafka。
- 在代码中搜索Topic相关的配置,比如注解、配置文件、常量类等。
- 检查配置中心如Nacos中的配置,查找Topic名称和相关参数。
- 针对RocketMQ,搜索代码中是否有使用特定特性的代码,如事务、延迟、顺序消息等。
- 记录所有找到的信息,整理成表格或文档,包括服务名称、使用的消息队列类型、Topic名称、使用的特性等。
- 验证和确认,可能需要测试或查看日志确保信息的准确性。
二、具体梳理步骤
1. 确定服务范围
• 列出所有服务:整理项目组维护的所有服务列表,明确待梳理的服务名称、代码仓库地址及部署环境(如开发、测试、生产)。
这里最好直接使用在线表格记录。
2. 检查消息队列依赖
• 查看构建文件:检查每个服务的依赖配置(如pom.xml
、build.gradle
),确认是否引入以下依赖:
• RocketMQ:org.apache.rocketmq:rocketmq-spring-boot-starter
或 org.apache.rocketmq:rocketmq-client
• Kafka:org.springframework.kafka:spring-kafka
或 org.apache.kafka:kafka-clients
3. 收集Topic配置
代码中的配置
• RocketMQ:
• 搜索代码中的@RocketMQMessageListener
注解,提取topic
字段。
• 查找RocketMQTemplate.send()
方法调用,确认发送消息时指定的Topic。
• Kafka:
• 搜索@KafkaListener
注解中的topics
或topicPattern
。
• 查找KafkaTemplate.send(topic, message)
调用。
• 通用搜索:全局搜索代码库中的关键词如topic
、topics
、bootstrap.servers
(Kafka)、namesrvAddr
(RocketMQ)。
这里有个小技巧:直接点到搜到的类,点击下边可以直接粘贴topic,然后点到下一个类,就很便捷切换
配置文件
• 本地配置:检查application.yml
、application.properties
等文件中的配置项:
# RocketMQ示例
rocketmq:
name-server: 127.0.0.1:9876
producer:
group: my-group
consumer:
topic: my-topic
# Kafka示例
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
topics: my-topic
• Nacos配置中心:
• 登录Nacos,按服务名或关键词(如rocketmq
、kafka
、topic
)搜索配置,提取Topic名称和相关参数(如生产者/消费者组、集群地址)。
4. 识别RocketMQ特性使用
在代码中搜索以下特征,判断是否使用了高级特性:
• 事务消息:
• 查找实现了TransactionListener
的类。
• 搜索sendMessageInTransaction
方法调用。
• 延迟消息:
• 查找消息发送时设置delayTimeLevel
或delaySeconds
(如message.setDelayTimeLevel(3)
)。
• 顺序消息:
• 生产者:使用SendResult
和MessageQueueSelector
的send
方法。
• 消费者:检查@RocketMQMessageListener
中consumeMode = ConsumeMode.ORDERLY
。
• 消息过滤:
• 检查@RocketMQMessageListener
中的selectorType
和selectorExpression
。
5. 自动化辅助工具
• 脚本搜索:
# 搜索RocketMQ Topic配置
grep -rnw './src' -e '@RocketMQMessageListener'
grep -rnw './src' -e 'RocketMQTemplate.send'
# 搜索Kafka Topic配置
grep -rnw './src' -e '@KafkaListener'
grep -rnw './src' -e 'KafkaTemplate.send'
# 搜索配置文件中的Topic
grep -rnw './config' -e 'topic:'
• Nacos API:通过Nacos的OpenAPI批量导出配置,过滤出含有关键词的配置项。
6. 验证与确认
• 日志分析:检查服务日志中是否有消息发送/消费的记录(如SendResult
、ConsumeMessage
日志)。
• 消息队列控制台:
• RocketMQ Dashboard:查看Topic列表、生产者/消费者组。
• Kafka Manager:检查Topic的分区、消费组偏移量。
• 环境区分:确认不同环境(如测试、生产)的配置差异,避免遗漏环境特有配置。
7. 整理结果
将收集的信息整理为表格,包含以下字段:
| 服务名称 | 消息队列类型 | Topic名称 | 生产者/消费者组 | RocketMQ特性 | 配置来源(代码/配置文件/Nacos) | 环境 | 备注 |
注意事项
• 废弃Topic:与开发团队确认已发现的Topic是否仍在使用,避免统计到废弃配置。
• 动态生成Topic:部分Topic可能是程序动态生成的(如按日期拼接),需结合代码逻辑判断。
• 权限问题:确保有权限访问代码仓库、Nacos配置及消息队列管理界面。
通过以上步骤,可以系统化梳理出消息队列的使用情况,并为后续优化或规范制定提供数据支持。