關於rabbitmq的併發優化

2021-10-08 10:19:20 字數 1852 閱讀 4581

首先是鏈結模式的區分,這裡的鏈結模式我們預設選用的是channel,但是在壓測時候出現了tps波動很大的情況,所以必須要對此進行優化操作

channel模式:

使用springboot鏈結rabbitmq的預設鏈結模式,此模式的特點是在鏈結時乙個應用與rabbitmq鏈結只開闢乙個connection,在connection中使用connectionfactory鏈結池開啟多個channel鏈結,這樣多個請求可以服用channel鏈結,節約了傳輸資源並且提高了效率,但是,在有限的connectionfactory中的鏈結池中的channel不夠用的使用,生產者的主動請求是會被rabbit直接拒絕的,這塊需要注意,在高併發的情況下我們需要考慮是否需要這種模式

connection模式:故名思意,這種模式的特點在於當應用與rabbitmq進行鏈結時,是可以開啟多個connection通道的,這樣每個connection通道中又可以快取多個channel鏈路復用,可以大大提高我們整個mq的併發量,但是不好的地方在於我們在使用的時候開啟多個connnection需要大量的資源消耗,以及當程式中的併發量達不到時,多出來的channel開啟也會導致資源的浪費,所以具體使用的規劃,是需要我們依據業務的規劃來決定的

我們可以使用乙個單例的connection物件建立多個channel來實現資料傳輸,但是在channel資訊比較大的情況下,connection頻寬會限制訊息的傳輸。那麼需要設計connection池,將流量分攤到不同的connection上。

下面來介紹一下我們使用的connectionfactory是個什麼呢

顧名思義,作為connection的鏈結工廠,負責應用程式與mq之間建立connection鏈結,表示乙個tcp鏈結,但是實際資料的傳輸是建立在connection中的channel通道,connection中的多個channel共用乙個tcp的連線

頻繁建立tcp連線和channel連線是消耗效能的,於是我們希望可以共享connection或者channel。達到連線的復用。

rabbitmq的請求處理執行緒池的快取大小設定

快取模式為channel時:
connectionfactory.

setchannelcachesize(10

);

表示設定的單個connection中的channel的大小為10,要先獲取到乙個channel,獲取channel時會先從快取中找閒置的channel,如果沒有則建立新的channel,當channel數量大於快取數量時,多出來沒法放進快取的會被關閉。

connectionfactory.

setchannelcheckouttimeout

(600

);

單位毫秒,當這個值大於0時,channelcachesize代表的是快取的數量上限,當快取獲取不到可用的channel時,不會建立新的channel會等待指定的時間,若到時間後還獲取不到可用的channel,直接丟擲amqptimeoutexception。

快取模式為connectionl時:
connectionfactory.

setconnectioncachesize(10

);

僅在connection模式下使用,指定connection快取數量

connectionfactory.

setconnectionlimit

(600

);

僅在connection模式下使用,指定connection數量上限。。

此外,除了mq自身的引數設定之外,外界的物理條件同樣也影響這mq的併發

如伺服器網路頻寬,記憶體,磁碟等等

Sql優化 三 關於oracle的併發

oracle的併發技術可以將乙個大任務分解為多個小任務由多個程序共同完成。合理地使用併發可以充分利用系統資源,提高效率。一 併發的種類 parallel query parallel dml pdml parallel ddl parallel recovery more 二 適用場合 適用para...

關於RabbitMQ的工作模式

首先了解rabbitmq的一些名詞 rabbitmq的工作模式 1,模式,訊息生產者直接將訊息加入到佇列中,訊息消費者監聽訊息佇列,如果佇列有訊息,就消費掉,訊息被拿走後會自動刪除,但有可能訊息並沒有被消費者正確處理,但訊息卻已經消失了,造成消失丟失,解決 在訊息正確處理後手動確認,注意要即時,否則...

php fpm併發優化

伺服器lnmp環境安裝好後,沒有進行配置優化,就採用的預設配置。最近開始推廣,突然就遇到效能問題了。主要症狀是 1.有時第一次連線的時候很慢,連線上後就很快。2.採用qq登入,會變得很慢。然後其它人訪問也會變得很慢。初步分析原因是 首先排除cpu和記憶體瓶頸的問題 1.預設配置,只啟動了兩個php ...