1. 程式人生 > >2018-11-28-Python全棧開發-day90-分支開發0--rabbitmq

2018-11-28-Python全棧開發-day90-分支開發0--rabbitmq

rabbitmq理論知識

  可以當作一個郵局,是一個訊息佇列,生產者將訊息放入佇列,消費者在佇列中取訊息。rabbitqm是一個伺服器,不同的程式都可以通過rabbitmq來進行通訊。

1.佇列queue

  不同的程式可以確定不同的佇列來進行資訊的傳輸,生產者將訊息放在佇列中,消費者從佇列中獲取資訊。多個消費者可以同時從佇列中取資料,而且rabbitmq是公平的,給多個消費者平均的發訊息,而不是像執行緒一樣來搶資源。

  1.1 多個消費者可能出現的問題

  1)若消費者沒有處理完訊息就宕機,則有可能會導致這條訊息丟失,為了避免這種情況,每個消費者完成了一個訊息,伺服器會檢測消費者的狀態,是否斷開了連線,消費者都必須給rabbitmq伺服器返回一個回執來進行確定,此時rabbitmq才會從佇列中刪除這個訊息,但是隻要消費者沒有斷開連線,且沒有返回回執,則這個訊息一直在佇列中。

  2)若多個消費者處理訊息的能力不同,當第一個消費者剛處理一半時,又輪到給這個消費者發訊息,則會出現問題,

    可以通過設定prefetchcount來設定每次給消費者的訊息數,每次只給一個,這樣當檢測到正在處理時,則不會給他發訊息。

2.exchange

  在rabbitmq中,實際上伺服器並不是直接將訊息放入佇列,而是將訊息放入交換機,交換機根據不同的規則,來確定傳送的消費者

  2.1 rounting key

    生產者在將訊息傳送給ex的時候,一般會指定一個rounting key,也就是傳送規則,

  2.2 binding

    binding的作用是將交換機和佇列關聯起來,這樣就可以通過交換機放佇列裡發資料