亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

引入 message 表的意義?

為了保證消息百分百投遞, 在發送消息到 RabbitMQ 的同時,寫入一份消息到 message 表.


然后消費者讀取 RabbitMQ 的同時也要查詢 message 表對應的消息.??


我有點理解不了, 在這個設計中, 直接拿到 Rabbit 貌似都可以,理解不了意義在哪里.

正在回答

3 回答

借樓,感覺這個場景舉例不是很好,既然我消費者能直接訪問DB,并且也有個定時任務可以讀取業務數據和MSG數據,那還需要RabbitMQ干嘛。我直接讓生產者把消息放到MSG表,消費者定時任務訪問MSG表獲取消息處理,不用擔心冪等,不用擔心消息在MQ傳遞過程總出現的各種問題。?

0 回復 有任何疑惑可以回復我~
#1

_phpstudy 提問者

我當初就是這個問題, 在這個流程中,確實直接干掉 rabbit 也是無問題的. 這個問題應該重點從消息隊列能辦到而 db 辦不到的角度出發. 假設 你現在消息比較多, 生產消息速度比較快, 使用 DB, 會頻繁的操作DB,這里就有個效率問題. 再假設, 你因為消息多, 需要多跑一個程序來處理消息, 使用 db , 可能會產生 兩個程序互相競爭問題(多個程序處理同一條記錄,產生臟數據 或者 產生鎖)
2020-03-26 回復 有任何疑惑可以回復我~
#2

渙渙虛心 回復 _phpstudy 提問者

分布式應用中,不同的application用不同的DB啊。類似分布式事務里本地消息表。。。
2020-05-19 回復 有任何疑惑可以回復我~

如果一個消息成功產生了,但是因為生產者沒有連接到exchange或者網絡故障等 那么這個消息是不會保存到消息隊列中去的,消費者也就無法對這個消息進行消費了,而案例中這個message表就能解決這個問題,就算在消息隊列中沒有這條消息記錄也能在數據庫的消息表中找到,并重新進行消費

2 回復 有任何疑惑可以回復我~

消費者讀取MQ的時候為什么需要拿去message表對應的消息?message表只是起到一個訂單發送消息狀態的記錄作用 只是記錄的作用,在拿去mq后手動確認消息簽收后 這時候才回去更新message表對應的訂單投遞狀態 即:0(發送中)->1(發送成功),如果說中間因為網絡狀態等等導致消費者這邊沒有簽收確認這個消息,此時的訂單消息狀態還是0,這時候會有定時任務去輪詢查取所有消息狀態為0(發送中)的消息來resend。

0 回復 有任何疑惑可以回復我~
#1

_phpstudy 提問者

我的問題就在于此, 你簽收消息之后, 更新 message 表對應消息 這一步. 我們有了 message 表, 記錄了消費者要確認的消息, 記錄了消息的狀態. 那么我們現在直接 把 rabbitMQ 干掉. 只用 message 表, 照樣能實現消息發布訂閱系統啊. 所以我問這里 rabbitMQ 起什么作用, 意義在哪里.
2019-10-23 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

引入 message 表的意義?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號