今天遇到兩位三方人員跟我反饋,某微服務的異步接口功能不正常了,由於該異步接口采用Kafka異步消息的方案,對方說沒有收到Kafka給消費者的通知,根據此問題,聯系了相關人員進行了分析:
(一)明確環境是否一致
1、生產者和消費者鏈接Kafka的地址是否一致,初步發現A方消費者鏈接Kafka的地址不正確,沒有與生產者鏈接Kafka的地址保持一致。
2、topic和key是否都一致,初步可以確定A方消費的topic和key都是跟生產者的topic和key是一一對應的。
(二)生產者和Kafka之間的交互
通過生產者的日志分析,已成功將消息發生給Kafka了,並且在Kafka端也明確是接收到了次消息,所以說生產者和Kafka之間的交互是沒有問題的,流程正常。
(三)Kafka和消費者之間的交互
1、A方消費者矯正鏈接Kafka的地址后進行測試,表明是可以正常接收到,到此A方消費者的問題得到了處理,就是地址不正確造成的;
2、B方消費者暫時還沒有接收到通知,經Kafka方的確認,B方消費者沒有在生產者提供的topic下進行訂閱,並且B方消費者在啟動時也沒有看到該topic的日志信息,因此Kafka方先讓B方消費者修改一下topic信息和key信息,在代碼中寫死;B方消費者修改后進行測試,表明是可以正常接收到消息了,並且在Kafka那里也看到該topic下有B方消費者的訂閱了,到此B方消費者的問題也到了處理,就是topic和key不正確造成的。
3、后來又聽B方說是bean注入的問題(指定了@Qualifier()后就不能訂閱了),目前還不知道確定的原因。
小結:在遇到這類問題時一定要檢查自身的代碼,配置信息是否正常,否則這樣的分析和定位都是在浪費大家的時間。