做者:一號線
https://segmentfault.com/a/11...
RabbitMQ是基於AMQP協議的,經過使用通用協議就能夠作到在不一樣語言之間傳遞。java
核心概念web
交換機的類型,direct、topic、fanout、headers,durability(是否須要持久化true須要)auto delete當最後一個綁定Exchange上的隊列被刪除Exchange也刪除。面試
消息落庫,對消息進行打標算法
消息的延遲投遞數據庫
在高併發場景下,每次進行db的操做都是每場消耗性能的。咱們使用延遲隊列來減小一次數據庫的操做。segmentfault
冪等性是什麼?點擊 這篇文章看下。
我對一個動做進行操做,咱們肯能要執行100次1000次,對於這1000次執行的結果都必須同樣的。好比單線程方式下執行update count-1的操做執行一千次結果都是同樣的,因此這個更新操做就是一個冪等的,若是是在併發不作線程安全的處理的狀況下update一千次操做結果可能就不是同樣的,因此併發狀況下的update操做就不是一個冪等的操做。對應到消息隊列上來,就是咱們即便受到了多條同樣的消息,也和消費一條消息效果是同樣的。後端
優勢:實現簡單緩存
缺點:高併發下有數據寫入瓶頸。安全
使用Redis進行冪等是須要考慮的問題服務器
理解confirm消息確認機制
Return消息機制處理一些不可路由的消息,咱們的生產者經過指定一個Exchange和Routinkey,把消息送達到某一個隊列中去,而後咱們消費者監聽隊列進行消費處理!
在某些狀況下,若是咱們在發送消息的時候當Exchange不存在或者指定的路由key路由找不到,這個時候若是咱們須要監聽這種不可到達的消息,就要使用Return Listener!
Mandatory 設置爲true則會監聽器會接受到路由不可達的消息,而後處理。若是設置爲false,broker將會自動刪除該消息。
什麼是消費端的限流?限流算法 點擊這裏閱讀。
假設咱們有個場景,首先,咱們有個rabbitMQ服務器上有上萬條消息未消費,而後咱們隨便打開一個消費者客戶端,會出現:巨量的消息瞬間推送過來,可是咱們的消費端沒法同時處理這麼多數據。
這時就會致使你的服務崩潰。其餘狀況也會出現問題,好比你的生產者與消費者能力不匹配,在高併發的狀況下生產端產生大量消息,消費端沒法消費那麼多消息。
void basicQOS(unit prefetchSize,ushort prefetchCount,Boolean global)方法。
TTL time to live 生存時間。
死信隊列:DLX,Dead-Letter-Exchange
利用DLX,當消息在一個隊列中變成死信(dead message,就是沒有任何消費者消費)以後,他能被從新publish到另外一個Exchange,這個Exchange就是DLX。
消息變爲死信的幾種狀況:
DLX也是一個正常的Exchange,和通常的Exchange沒有任何的區別,他能在任何的隊列上被指定,實際上就是設置某個隊列的屬性。當這個隊列出現死信的時候,RabbitMQ就會自動將這條消息從新發布到Exchange上去,進而被路由到另外一個隊列。能夠監聽這個隊列中的消息做相應的處理,這個特性能夠彌補rabbitMQ之前支持的immediate參數的功能。
死信隊列的設置
Exchange: dlx.exchange(自定義的名字)
queue: dlx.queue(自定義的名字)
routingkey: #(#表示任何routingkey出現死信都會被路由過來)
而後正常的聲明交換機、隊列、綁定,只是咱們在隊列上加上一個參數:
arguments.put("x-dead-letter-exchange","dlx.exchange");
多活模式:這種模式也是實現異地數據複製的主流模式,由於shovel模式配置相對複雜,因此通常來講實現異地集羣都是使用這種雙活,多活的模式,這種模式須要依賴rabbitMQ的federation插件,能夠實現持續可靠的AMQP數據。
rabbitMQ部署架構採用雙中心模式(多中心)在兩套(或多套)數據中心個部署一套rabbitMQ集羣,各中心的rabbitMQ服務須要爲提供正常的消息業務外,中心之間還須要實現部分隊列消息共享。
你們能夠關注微信公衆號:Java技術棧,能夠獲取我整理的 N 篇消息隊列教程,都是乾貨,第一時間更新。
多活架構以下:
federation插件是一個不須要構建Cluster,而在Brokers之間傳輸消息的高性能插件,federation能夠在brokers或者cluster之間傳輸消息,鏈接的雙方可使用不一樣的users或者virtual host雙方也可使用不一樣版本的erlang或者rabbitMQ版本。federation插件可使用AMQP協議做爲通信協議,能夠接受不連續的傳輸。
Federation Exchanges,能夠當作Downstream從Upstream主動拉取消息,但
並非拉取全部消息,必須是在Downstream上已經明肯定義Bindings關係的
Exchange,也就是有實際的物理Queue來接收消息,纔會從Upstream拉取消息
到Downstream。
使用AMQP協議實施代理間通訊,Downstream 會將綁定關係組合在一塊兒, 綁定/解除綁定命令將發送到Upstream交換機。
所以,Federation Exchange只接收具備訂閱的消息。
HAProxy是一款提供高可用性、負載均衡以及基於TCP (第四層)和HTTP
(第七層)應用的代理軟件,支持虛擬主機,它是免費、快速而且可靠的一種解決
方案。HAProxy特別適用於那些負載特大的web站點,這些站點一般又須要會
話保持或七層處理。HAProxy運行在時下的硬件上,徹底能夠支持數以萬計的
併發鏈接。而且它的運行模式使得它能夠很簡單安全的整合進您當前的架構中
同時能夠保護你的web服務器不被暴露到網絡上。
KeepAlived軟件主要是經過VRRP協議實現高可用功能的。VRRP是
Virtual Router RedundancyProtocol(虛擬路由器冗餘協議)的縮寫,
VRRP出現的目的就是爲了解決靜態路由單點故障問題的,它可以保證當
個別節點宕機時,整個網絡能夠不間斷地運行因此,Keepalived - -方面
具備配置管理LVS的功能,同時還具備對LVS下面節點進行健康檢查的功
能,另外一方面也可實現系統網絡服務的高可用功能
keepAlive的做用
Keepalived高可用服務對之間的故障切換轉移,是經過VRRP (Virtual Router
Redundancy Protocol ,虛擬路由器冗餘協議)來實現的。
在Keepalived服務正常工做時,主Master節點會不斷地向備節點發送( 多播的方式)心跳消息,用以告訴備Backup節點本身還活看,當主Master節點發生故障時,就沒法發送心跳消息,備節點也就所以沒法繼續檢測到來自主Master節點的心跳了,因而調用自身的接管程序,接管主Master節點的IP資源及服務。
而當主Master節點恢復時備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。
推薦去個人博客閱讀更多:
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
以爲不錯,別忘了點贊+轉發哦!