為什麼要使用mq?
非同步、解耦、削峰填谷
使用了mq之後有什麼優缺點?
缺點:系統可用性降低、系統複雜度提高、資料一致性問題
怎麼保證mq訊息不丟失?
生產者資料丟失:
1、事務方式:通過channel.txselect
開啟乙個事務,接著傳送訊息,如果訊息沒有成功被rabbitmq接收到,生產者會收到異常,此時就可以進行事務回滾channel.txrollback
然後重新傳送。假如rabbitmq收到了這個訊息,就可以提交事務channel.txcommit
。
2、confirm機制:在生產者設定,每次寫訊息的時候會分配乙個唯一的id,然後rabbitmq收到之後會回傳乙個ack,告訴生產者這個訊息ok了。
一般都是使用confirm機制。
rabbitmq資料丟失:
在訊息傳送到rabbitmq之後,預設是沒有落地磁碟的,萬一rabbitmq宕機了,這個時候訊息就丟失了。rabbitmq提供了乙個持久化的機制,訊息寫入之後會持久化到磁碟,哪怕是宕機了,恢復之後也會自動恢復之前儲存的資料,這樣的機制可以確保訊息不會丟失。
步驟:1、建立queue的時候將其設定為持久化的,這樣就可以保證rabbitmq持久化queue的元資料,但是不會持久化queue裡的資料;
2、傳送訊息的時候將訊息的deliverymode設定為2,就是將訊息設定為持久化的,此時rabbitmq就會將訊息持久化到磁碟上去。
消費端資料丟失:
rabbitmq消費訊息的機制:在消費者收到訊息的時候,會傳送乙個ack給rabbitmq,告訴rabbitmq這條訊息被消費到了,這樣rabbitmq就會把訊息刪除。預設情況下這個傳送ack的操作是自動提交的,所以解決方案就是:關閉rabbitmq消費者的自動提交ack,在消費者處理完這條訊息之後再手動提交ack。
怎麼保證mq的高可用性?
rabbitmq有三種模式:單機模式,普通集群模式,映象集群模式(ok)
事物的四個特性和四個隔離級別
事物是一條或者多條sql語句組成的執行序列,這個序列中的所有語句都屬於同乙個工作單元,要麼同時完成,其中如果有乙個失敗,則其他操作都要回滾。事物是乙個不可分割的資料庫邏輯工作單位,要麼全部完成,要不失敗回滾。事務執行的結果必須使資料庫從乙個一致性狀態變到另乙個一致性狀態。乙個事物的執行不能被別的併發...
typedef四個用途
用途一 定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如 char pa,pb 這多數不符合我們的意圖,它只宣告了乙個指向字元變數的指標,和乙個字元變數 以下則可行 typedef char pchar 一般用大寫 pchar pa,pb 可行,同時宣告了兩個指向字...
四個作用域
http會話開始到結束這段時間。session 的作用範圍為一段使用者持續和伺服器所連線的時間,但與服務 器斷線,這個屬性就無效。只要將資料存入session物件,資料的範圍就為session session是通過httpsession介面實現的,它提供的主要方法如下所示。object httpse...