項目第一次引入spring boot 封裝的rabbitMQ框架,用於接收庫存狀態的消息,用於實時更新。spring
rabbitMQ開發過程當中雙方須要提早約定如下數據:json
上圖爲拿到的數據格式約定,exchange爲topic。然而調試過程當中遇到如下問題bash
以上,讓我深入體會到契約精神多麼重要。因爲種種數據格式問題,嚴重拖慢了開發進度。然鵝,生產方其實並未意識到這個問題,潛意識認爲本身處於數據鏈路的上游,就能夠隨意修改約定好的格式服務器
終於開心(kubi)的完成了開發測試過程,準備開開心心線上作發佈了。結果代碼在部署過程當中大量報錯,服務器直接done掉了。查看報錯信息app
method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'sim2es' in vhost '/': received 'topic' but current is 'fanout', class-id=40, method-id=10)
複製代碼
exchange須要fanout類型,我消費方定義的是topic類型。 什麼鬼,明明測試環境是topic類型,到線上搖身一變變成廣播fanout了?通過與生產方溝通,發現生產方爲了本身作線上消費的測試,上線的時候把exchange類型順手改爲了fanout,致使與我消費方的topic類型不匹配,消費方直接聲明queue報錯。 生產方是沒有想到這樣改會致使exchange類型不匹配?仍是其實根本不知道這個知識點,咱也不敢問。直接讓他老老實實把exchange類型改回topic。框架
以上,每一個開發都應該嚴格按照開發規範,熟悉mq的各個字段的含義和用法,而不是不動腦筋就隨便亂改,害人害己啊。測試
在不熟悉的領域更應該多查看資料,因爲開發大量使用框架,一些底層的東西被很好的封裝了起來,多閱讀源碼,才能更好去使用框架ui