MQ消息疑似丢失问题排查方法
MQ消息疑似丢失问题排查方法
现象
某客户发现,发送到集成云消息订阅主题的数据,没有被集成云消费生成单据,且调用方没有收到异常日志。怀疑是发送后消息丢失了,可以参考以下思路进行排查。
检查方案错误日志
根据具体的业务集成场景,到对应的“单据消息任务监控”/"启动方案执行日志“/”服务流程实例“/”API集成“查看日志,如果报错了会有日志记录,如果没有触发继续往下排查。
检查是否接收到消息
在【消息集成】-【消息集成监控】-【消息接收】检查是否成功收到对应消息,可以通过“消息摘要”字段快速过滤数据;如果没有配置摘要模板或更早之前的版本,需要在t_iscb_mq_data_received表查询fdata字段或fdatatag字段(超过50个字符,存储在fdata_tag字段中)。
如果消息列表没有相关数据,需要检查MQ消息是否发送成功。
检查消息是否发送成功
通过集成平台发送的MQ,可以在【消息集成】-【消息集成监控】-【消息发送】列表找到是否有对应记录。由于集成平台在发送MQ前会存储到数据库,还需要检查数据存储成功但消息并未发送成功的情形,这种需要在monitor查看是否有错误日志。
如果是业务自行编写的MQ发送代码,需要检查发送时是否有异常,确保消息发送到了MQ。
当以上情形都排查完后,排查一下MQ服务器和消费者的问题。
检查是否有其他消费者
以RabbitMQ为例,先根据发布或订阅主题的编码,找到队列名,编码即为队列名,如下,队列名即“lwr_test”。
去管理控制台的官网,根据队列名,查看对应的消费者个数,这里发现有4个消费者
在monitor查看节点个数,只有3个。
另外,也可以在集成平台服务器实例列表查看实例个数,如下图。
对照一下rabbitmq和monitor实际注册节点的个数,以及实例IP是否一致。如果不一致,可能是混入了其他的消费者,把消息收走了。
修改MQ队列名称用于排查问题
如果以上都无法判断,可以尝试修改队列编码,并重新禁用和启用消息订阅主题,观察是否能解决问题。
结论
MQ本身还是比较可靠的,以往怀疑MQ消息丢失时,极有可能是MQ消息被其他不相关的消费者消费了。例如:测试环境连了正式环境的消息服务器。因此测试环境和正式环境的数据隔离非常重要。
关于环境迁移时的数据脱敏问题参考:https://club.kdcloud.com/article/45250
MQ消息疑似丢失问题排查方法
本文2024-09-23 00:51:00发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-142140.html