RabbitMQ的應用場景 基本原理介紹

2021-08-20 06:24:42 字數 1286 閱讀 6053

訂單系統和庫存系統高耦合. 

引入訊息佇列 

訂單系統:使用者下單後,訂單系統完成持久化處理,將訊息寫入訊息佇列,返回使用者訂單下單成功。

庫存系統:訂閱下單的訊息,獲取下單訊息,進行庫操作。 

就算庫存系統出現故障,訊息佇列也能保證訊息的可靠投遞,不會導致訊息丟失(馬雲這下高興了).

佇列和交換機有乙個建立時候指定的標誌durable,durable的唯一含義就是具有這個標誌的佇列和交換機會在重啟之後重新建立,它不表示說在佇列中的訊息會在重啟後恢復 

訊息持久化包括3部分 

1. exchange持久化,在宣告時指定durable => true

hannel.exchangedeclare(exchangename, "direct", durable: true, autodelete: false, arguments: null);//宣告訊息佇列,且為可持久化的
channel.queuedeclare(queuename, durable: true, exclusive: false, autodelete: false, arguments: null);//宣告訊息佇列,且為可持久化的
channel.basicpublish("", queuename, messageproperties.persistent_text_plain, msg.getbytes());
channel.basic_qos(prefetch_count=1)

channel.basicpublish("", "taskqueue", properties, bytes);
如果有兩個接收程式用了各自的queue,但使用相同的routingkey去繫結direct exchange的話,分發的行為是複製的,也就是說每個程式都會收到這個訊息的副本。行為相當於fanout型別的exchange。

下面詳細來說:

#(hash)0個或多個單詞 

producer傳送訊息時需要設定routing_key,routing_key包含三個單詞和連個點號o,第乙個key描述了celerity(靈巧),第二個是color(色彩),第三個是物種: 

在這裡我們建立了兩個繫結: q1 的binding key 是」.orange.「; q2 是 「..rabbit」 和 「lazy.#」:

rabbitmq 應用場景

rabbitmq,或者說amqp解決了什麼問題,或者說它的應用場景是什麼?對於乙個大型的軟體系統來說,它會有很多的元件或者說模組或者說子系統或者 subsystem or component or submodule 那麼這些模組的如何通訊?這和傳統的ipc有很大的區別。傳統的ipc很多都是在單一系...

RabbitMQ應用場景

在大多數應用中,可通過訊息服務中介軟體來提公升系統非同步通訊,擴充套件解耦能力。比如,非同步處理 以使用者註冊為例 首先將使用者的註冊資訊寫入資料庫,然後給使用者傳送郵件,並且發一封簡訊。第一種方法 按照以前的同步方式,寫入資料庫調發郵件方法,發完郵件調發簡訊方法,每個需要50毫秒,算上寫入資料庫,...

RabbitMQ的應用場景

1.非同步處理 使用者註冊後,需要發註冊郵件和註冊簡訊,傳統的方式 序列和並行。序列 使用者註冊資訊寫入資料庫 傳送郵件 傳送簡訊 註冊成功,使用者使用 並行 使用者註冊資訊寫入資料庫 傳送郵件 傳送簡訊 註冊成功,使用者使用 因為郵件和簡訊並不是註冊所必需的,即使不接收郵件和簡訊,使用者也可以進行...