如何高效梳理几十个项目中全部的MQ的情况及topic信息

一、背景和思路

由于漏洞或者其他原因,公司有时候考虑是否中间件替换或者升级,这种业务场景下,可能会需要梳理当前几十个项目中全部使用比如kafka、RocketMQ等情况,以及topic等信息/是否使用了RocketMQ的一些特性等等。

代码中可能有,配置文件比如Nacos里也可能有配置,所以可能需要检查代码库和配置中心。

这个问题看起来有点复杂,但可以分步骤来解决:

  1. 列出所有项目组的服务。
  2. 检查每个服务的依赖,确认是否使用了RocketMQ或Kafka。
  3. 在代码中搜索Topic相关的配置,比如注解、配置文件、常量类等。
  4. 检查配置中心如Nacos中的配置,查找Topic名称和相关参数。
  5. 针对RocketMQ,搜索代码中是否有使用特定特性的代码,如事务、延迟、顺序消息等。
  6. 记录所有找到的信息,整理成表格或文档,包括服务名称、使用的消息队列类型、Topic名称、使用的特性等。
  7. 验证和确认,可能需要测试或查看日志确保信息的准确性。

二、具体梳理步骤

1. 确定服务范围

列出所有服务:整理项目组维护的所有服务列表,明确待梳理的服务名称、代码仓库地址及部署环境(如开发、测试、生产)。
这里最好直接使用在线表格记录。


2. 检查消息队列依赖

查看构建文件:检查每个服务的依赖配置(如pom.xmlbuild.gradle),确认是否引入以下依赖:
RocketMQorg.apache.rocketmq:rocketmq-spring-boot-starterorg.apache.rocketmq:rocketmq-client
Kafkaorg.springframework.kafka:spring-kafkaorg.apache.kafka:kafka-clients


3. 收集Topic配置

代码中的配置

RocketMQ
• 搜索代码中的@RocketMQMessageListener注解,提取topic字段。
• 查找RocketMQTemplate.send()方法调用,确认发送消息时指定的Topic。
Kafka
• 搜索@KafkaListener注解中的topicstopicPattern
• 查找KafkaTemplate.send(topic, message)调用。
通用搜索:全局搜索代码库中的关键词如topictopicsbootstrap.servers(Kafka)、namesrvAddr(RocketMQ)。

这里有个小技巧:直接点到搜到的类,点击下边可以直接粘贴topic,然后点到下一个类,就很便捷切换
在这里插入图片描述

配置文件

本地配置:检查application.ymlapplication.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,按服务名或关键词(如rocketmqkafkatopic)搜索配置,提取Topic名称和相关参数(如生产者/消费者组、集群地址)。


4. 识别RocketMQ特性使用

在代码中搜索以下特征,判断是否使用了高级特性:
事务消息
• 查找实现了TransactionListener的类。
• 搜索sendMessageInTransaction方法调用。
延迟消息
• 查找消息发送时设置delayTimeLeveldelaySeconds(如message.setDelayTimeLevel(3))。
顺序消息
• 生产者:使用SendResultMessageQueueSelectorsend方法。
• 消费者:检查@RocketMQMessageListenerconsumeMode = ConsumeMode.ORDERLY
消息过滤
• 检查@RocketMQMessageListener中的selectorTypeselectorExpression


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. 验证与确认

日志分析:检查服务日志中是否有消息发送/消费的记录(如SendResultConsumeMessage日志)。
消息队列控制台
RocketMQ Dashboard:查看Topic列表、生产者/消费者组。
Kafka Manager:检查Topic的分区、消费组偏移量。
环境区分:确认不同环境(如测试、生产)的配置差异,避免遗漏环境特有配置。


7. 整理结果

将收集的信息整理为表格,包含以下字段:
| 服务名称 | 消息队列类型 | Topic名称 | 生产者/消费者组 | RocketMQ特性 | 配置来源(代码/配置文件/Nacos) | 环境 | 备注 |


注意事项

废弃Topic:与开发团队确认已发现的Topic是否仍在使用,避免统计到废弃配置。
动态生成Topic:部分Topic可能是程序动态生成的(如按日期拼接),需结合代码逻辑判断。
权限问题:确保有权限访问代码仓库、Nacos配置及消息队列管理界面。

通过以上步骤,可以系统化梳理出消息队列的使用情况,并为后续优化或规范制定提供数据支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只IT攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值