<i id="yupd0"></i>
  • <i id="yupd0"></i>
  • <thead id="yupd0"></thead>
    <blockquote id="yupd0"></blockquote>
    <i id="yupd0"></i>
  • 碼迷,www.greeshyz.com
    首頁 > 其他好文 > 詳細

    【總結】rabbitmq

    時間:2020-07-21 23:24:11      閱讀:28      評論:0      收藏:0      [點我收藏+]

    標簽:basic   rect   刪除   虛擬   通過   假設   是的   sage   符號   

    一.rabbitmq基礎

    1.簡介

    RabbitMQ是使用Erlang語言來編寫的,并且RabbitMQ是基于AMQP協議的。Erlang語言在數據交互方面性能優秀,有著和原生Socket一樣的延遲,這也是RabbitMQ高性能的原因所在

    2.典型應用場景

    (1)異步處理。把消息放入消息中間件中,等到需要的時候再去處理。
    (2)流量削峰。例如秒殺活動,在短時間內訪問量急劇增加,使用消息隊列,當消息隊列滿了就拒絕響應,跳轉到錯誤頁面,這樣就可以使得系統不會因為超負載而崩潰。
    (3)日志處理
    (4)應用解耦。假設某個服務A需要給許多個服務(B、C、D)發送消息,當某個服務(例如B)不需要發送消息了,服務A需要改代碼再次部署;當新加入一個服務(服務E)需要服務A的消息的時候,也需要改代碼重新部署;另外服務A也要考慮其他服務掛掉,沒有收到消息怎么辦?要不要重新發送呢?是不是很麻煩,使用MQ發布訂閱模式,服務A只生產消息發送到MQ,B、C、D從MQ中讀取消息,需要A的消息就訂閱,不需要了就取消訂閱,服務A不再操心其他的事情,使用這種方式可以降低服務或者系統之間的耦合。

    3.AMQP中幾個重要概念

    (1)Server:接收客戶端的連接,實現AMQP實體服務。
    (2)Connection:連接,應用程序與Server的網絡連接,TCP連接。
    (3)Channel:信道,消息讀寫等操作在信道中進行。客戶端可以建立多個信道,每個信道代表一個會話任務。
    (4)Message:消息,應用程序和服務器之間傳送的數據,消息可以非常簡單,也可以很復雜。有Properties和Body組成。Properties為外包裝,可以對消息進行修飾,比如消息的優先級、延遲等高級特性;Body就是消息體內容。
    (5)Virtual Host:虛擬主機,用于邏輯隔離。一個虛擬主機里面可以有若干個Exchange和Queue,同一個虛擬主機里面不能有相同名稱的Exchange或Queue。
    (6)Exchange:交換器,接收消息,按照路由規則將消息路由到一個或者多個隊列。如果路由不到,或者返回給生產者,或者直接丟棄。RabbitMQ常用的交換器常用類型有direct、topic、fanout、headers四種,后面詳細介紹。
    (7)Binding:綁定,交換器和消息隊列之間的虛擬連接,綁定中可以包含一個或者多個RoutingKey。
    (8)RoutingKey:路由鍵,生產者將消息發送給交換器的時候,會發送一個RoutingKey,用來指定路由規則,這樣交換器就知道把消息發送到哪個隊列。路由鍵通常為一個“.”分割的字符串,例如“com.rabbitmq”。
    (9)Queue:消息隊列,用來保存消息,供消費者消費

    4.AMQP協議和RabbitMQ

    AMQP協議模型有三部分組成:生產者、消費者和服務端。
    生產者是投遞消息的一方,首先連接到Server,建立一個連接,開啟一個信道;然后生產者聲明交換器和隊列,設置相關屬性,并通過路由鍵將交換器和隊列進行綁定。同理,消費者也需要進行建立連接,開啟信道等操作,便于接收消息。
    接著生產者就可以發送消息,發送到服務端中的虛擬主機,虛擬主機中的交換器根據路由鍵選擇路由規則,然后發送到不同的消息隊列中,這樣訂閱了消息隊列的消費者就可以獲取到消息,進行消費。
    最后還要關閉信道和連接。
    RabbitMQ是基于AMQP協議實現的,其結構如下圖所示,和AMQP協議簡直就是一模一樣
    技術圖片
    1.消息基于什么傳輸
    由于TCP連接的創建和銷毀開銷較大,且并發數受系統資源限制,會造成性能瓶頸。RabbitMQ使用信道的方式來傳輸數據。信道是建立在真實的TCP連接內的虛擬連接,且每條TCP連接上的信道數量沒有限制

    2.如何保證冪等?
    唯一ID+指紋碼機制,利用數據庫主鍵去重
    將ID + 指紋碼拼接好的值作為數據庫主鍵,就可以進行去重了。即在消費消息前呢,先去數據庫查詢這條消息的指紋碼標識是否存在,沒有就執行insert操作,如果有就代表已經被消費了,就不需要管了

    5.常用交換機(Exchange)

    RabbitMQ常用的交換器類型有direct、topic、fanout、headers四種
    (1)Direct Exchange
    該類型的交換器將所有發送到該交換器的消息被轉發到RoutingKey指定的隊列中,也就是說路由到BindingKey和RoutingKey完全匹配的隊列中(如果一個隊列綁定到該交換機上要求路由鍵 “dog”,則只有被標記為“dog”的消息才被轉發,不會轉發dog.puppy,也不會轉發dog.guard,只會轉發dog)

    Channel channel = connection.createChannel();  
    channel.exchangeDeclare("exchangeName", "direct"); //direct fanout topic  
    channel.queueDeclare("queueName");  
    channel.queueBind("queueName", "exchangeName", "routingKey");  
      
    byte[] messageBodyBytes = "hello world".getBytes();  
    //需要綁定路由鍵  
    channel.basicPublish("exchangeName", "routingKey", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);
    

    (2)Fanout Exchange – 不處理路由鍵。你只需要簡單的將隊列綁定到交換機上。一個發送到交換機的消息都會被轉發到與該交換機綁定的所有隊列上。很像子網廣播,每臺子網內的主機都獲得了一份復制的消息。Fanout交換機轉發消息是最快的
    (3)Topic Exchange – 將路由鍵和某模式進行匹配。此時隊列需要綁定要一個模式上。符號“#”匹配一個或多個詞,符號“”匹配不多不少一個詞。因此“audit.#”能夠匹配到“audit.irs.corporate”,但是“audit.” 只會匹配到“audit.irs”

    Channel channel = connection.createChannel();  
    channel.exchangeDeclare("exchangeName", "topic"); //direct fanout topic  
    channel.queueDeclare("queueName");  
    channel.queueBind("queueName", "exchangeName", "routingKey.*");  
      
    byte[] messageBodyBytes = "hello world".getBytes();  
    channel.basicPublish("exchangeName", "routingKey.one", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);  
    

    二.高級特性

    1.過期時間(TTL)

    Time To Live,也就是生存時間,是一條消息在隊列中的最大存活時間,單位是毫秒。了解Redis的朋友應該一看就明白,二者很像。
    RabbitMQ可以對消息和隊列設置TTL。
    RabbitMQ支持設置消息的過期時間,在消息發送的時候可以進行指定,每條消息的過期時間可以不同。
    RabbitMQ支持設置隊列的過期時間,從消息入隊列開始計算,直到超過了隊列的超時時間配置,那么消息會變成死信,自動清除。
    如果兩種方式一起使用,則過期時間以兩者中較小的那個數值為準。
    當然也可以不設置TTL,不設置表示消息不會過期;如果設置為0,則表示除非此時可以直接將消息投遞到消費者,否則該消息將被立即丟棄

    2.消息確認

    為了保證消息從隊列可靠地到達消費者,RabbitMQ提供了消息確認機制。消費者訂閱隊列的時候,可以指定autoAck參數,當autoAck為true的時候,RabbitMQ采用自動確認模式,RabbitMQ自動把發送出去的消息設置為確認,然后從內存或者硬盤中刪除,而不管消費者是否真正消費到了這些消息。當autoAck為false的時候,RabbitMQ會等待消費者回復的確認信號,收到確認信號之后才從內存或者磁盤中刪除消息。
    消息確認機制是RabbitMQ消息可靠性投遞的基礎,只要設置autoAck參數為false,消費者就有足夠的時間處理消息,不用擔心處理消息的過程中消費者進程掛掉后消息丟失的問題。

    3.持久化

    消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保證消息可靠性的呢?答案就是消息持久化。持久化可以防止在異常情況下丟失數據。RabbitMQ的持久化分為三個部分:交換器持久化、隊列持久化和消息的持久化。
    (1)exchange的持久化對消息的可靠性來說沒有什么影響,但是同樣如果exchange不設置持久化,那么當broker服務重啟之后,exchange將不復存在,那么既而發送方rabbitmq producer就無法正常發送消息。

    (2)queue的持久化標識durable設置為true,則代表是一個持久的隊列,那么在服務重啟之后,也會存在,因為服務會把持久化的queue存放在硬盤上,當服務重啟的時候,會重新讀取之前被持久化的queue。隊列是可以被持久化,但是里面的消息是否為持久化那還要看消息的持久化設置。也就是說,重啟之前那個queue里面還沒有發出去的消息的話,重啟之后那隊列里面是不是還存在原來的消息,這個就要取決于發生著在發送消息時對消息的設置了。

    (3)將交換器、隊列和消息都設置持久化之后就能保證數據不會被丟失嗎?
    ①消費者端: 消費者訂閱隊列將autoAck設置為true,雖然消費者接收到了消息,但是沒有來得及處理就宕機了,那數據也會丟失,解決方案就是以為手動確認接收消息,待處理完消息之后,手動刪除消息
    ②在rabbitmq服務端,如果消息正確被發送,但是rabbitmq未來得及持久化,沒有將數據寫入磁盤,服務異常而導致數據丟失,解決方案,可以通過rabbitmq集群的方式實現消息中間件的高可用性

    4.死信隊列

    (1)死信
    消息被拒絕簽收(Nack),并且不允許重回隊列。
    TTL設定的消息有效時間過期。
    實際消息數大于隊列最大限制數,那么超出最大限制的消息都將會是死信。

    (2)死信隊列
    “死信隊列”,顧名思義,就是存放死信的隊列。其實它和普通的隊列并沒有太大差別,唯一的區別就是他的routingkey是"#"。也就是說:只要你路由到我這個死信隊列,我都接收

    5.延遲隊列

    一般的隊列,消息一旦進入隊列就會被消費者立即消費。延遲隊列就是進入該隊列的消息會被消費者延遲消費,延遲隊列中存儲的對象是的延遲消息,“延遲消息”是指當消息被發送以后,等待特定的時間后,消費者才能拿到這個消息進行消費。
    延遲隊列用于需要延遲工作的場景。最常見的使用場景:淘寶或者天貓我們都使用過,用戶在下單之后通常有30分鐘的時間進行支付,如果這30分鐘之內沒有支付成功,那么訂單就會自動取消。

    【總結】rabbitmq

    標簽:basic   rect   刪除   虛擬   通過   假設   是的   sage   符號   

    原文地址:https://www.cnblogs.com/muacheng/p/13348269.html

    (0)
    (0)
       
    舉報
    評論 一句話評論(0
    登錄后才能評論!
    迷上了代碼!
    91色国产论坛,久草99福利资源,青青草在线华人,99热在线视频观看免费,青青草a片免费看,青青草av视频导航,香蕉网站伊人大香蕉 青青碰人青青草免费 国产自拍偷拍在线播放 青青草华人在线av 伊人影院在线大香 无码大香蕉网伊人色 久久大香蕉视频网 青草精品资源在线 伊人大香蕉在线精品 97资源总站久久爱视频 自拍中文字幕 青青草手机在线视频 青青草久久爱大香蕉 国产青青草自拍 伊人大香蕉在线精品 97资源总站久久爱视频 自拍中文字幕 av图片在线看 久草视频福利免费资源站 自拍国产视频在线 www.琪琪色 爱色影爱色搞搞 97资源库 大香萑a久草视频 久草在线福利资站 青青草成人在线免费视频 久久精品国can视频在热 99热国产情侣偷拍 国产自拍 在线 凹凸分类视频97免费 av啪啪中文网站 青青草91自拍视频 奇米影视第四色 国产无限制自拍 大香蕉伊人精品在线 久久手机看片国产免费 无码大香蕉网伊人色 亚洲激情色 久草99福利资源 狼人色终合网站 91色国产色去色 2019奇米777奇米网 久久草妹妹色 米奇影院888奇米色 青青青草成人免费现看 超碰自拍 在线99热这里精品 色琪琪永久无码 伊人大香蕉成人视频综合 国产自拍视频在线 大香蕉伊人久操在线 青青草久草热久久草 偷拍自拍第四色 奇米网电影网 超碰99久久天天拍日日操 天天拍天天拍久草片 激情图片,激情小说 超碰碰av大香蕉伊人 久草97大香蕉伊人 美女伊人色情香蕉网站 青青草华人免费视频在线 大香蕉伊人久草视频 奇米网在线手机在线 青草七次郞视频观看 青青草公开在线观看 狠狠夜夜干大香蕉伊人 777奇米网 日逼视频网站 欧美人和动物XXX 大香蕉色 欧美 国产 奇米影院首页 大香蕉伊人久久爱在线 青青青草免费手机播放 国产青青草 欧美一级黑寡妇夜夜干 啪啪 国产精品 东方aⅴ在线看 手机看A片 777米奇色狠狠俺去啦 香蕉网站伊人中文字幕 久操在线新免费视频 伊人影院在线大香 大香蕉成人伊人在线视频 青青草成人在线视频观看 91国产自拍偷拍视频 青青草色爱久久 精品国产自拍 小色狗 琪琪热热色无码 影音先锋大香蕉久草资源 小明视频看看成人免费 俺去了色网婷婷色 久久色情片 超碰在线青青草 超碰视频起碰视频 国产偷拍自拍影音先锋 小明视频看看成人免费 俺去了色网婷婷色 久久色情片 超碰在线青青草 超碰视频起碰视频 国产偷拍自拍影音先锋 老鸭窝在线视频 www.奇米在线四色 老版本日本怡春院 强奸乱伦在线观看 青青草在观视频 色琪琪在线视频原网 欧美色色大香焦 欧美色热图 亚洲香蕉手机在线观看视频 偷拍偷窥自拍网站 超91在线观看 最新奇米奇色777在线 婷婷网站 微拍秒拍福利视频 自拍在线 精品视频 欧美情色无码在线 久草激情视频 午夜高清影院在线观看 第四色青娱乐奇米影视 青青草在线综合 99热这里有精品 自拍偷拍影音先锋 国产自拍 先锋影音 成人在线视频97 久草在线免费观看大香蕉 99er久久国产精品在线 精品国产在线偷拍 啪啪青青草视频 国内偷拍 亚洲 大香蕉成人手机在线 在线伊人大香蕉手机版 久草伊人久草视频 伊人久久青青草综合网 青青草手机在线视频 青青草久久爱大香蕉 国产青青草自拍 伊人大香蕉在线精品 97资源总站久久爱视频 自拍中文字幕 av图片在线看 久草视频福利免费资源站 自拍国产视频在线 www.琪琪色 爱色影爱色搞搞 97资源库 大香蕉在线视频免费观看 a片直播妹子在线视频 a.v在线视频 开心五月色婷婷免费 香蕉福利视频在线观 青青草成人+激情偷拍 青青草视频大香蕉伊人网 av啪啪中文网站 青青草91自拍视频 奇米影视第四色 国产无限制自拍 大香蕉伊人精品在线 久久手机看片国产免费 无码大香蕉网伊人色 亚洲激情色 久草99福利资源 狼人色终合网站 91色国产色去色 2019奇米777奇米网 久久草妹妹色 米奇影院888奇米色 青青青草成人免费现看 超碰自拍 在线99热这里精品 色琪琪永久无码 伊人大香蕉成人视频综合 国产自拍视频在线 大香蕉伊人久操在线 青青草久草热久久草 偷拍自拍第四色 奇米网电影网 超碰99久久天天拍日日操 天天拍天天拍久草片 激情图片,激情小说 青青草久草热久久草 偷拍自拍第四色 奇米网电影网 超碰99久久天天拍日日操 天天拍天天拍久草片 操好屌色 米奇先锋 久草 偷拍 亚洲,偷拍,自拍,精品 伊人大香蕉综合色 大香蕉久久久 成人色啪啪 大香蕉色看片 欧美自拍在线 久久色综合网站xoxo 久热草大香蕉在线视频 久久大香蕉视频网 肏逼免费视频在线 网友自拍偷拍 欧美 国产 奇米影院首页 大香蕉伊人久久爱在线 青青青草免费手机播放 国产青青草 欧美一级黑寡妇夜夜干 啪啪 国产精品 东方aⅴ在线看 手机看A片 777米奇色狠狠俺去啦 香蕉网站伊人中文字幕 久操在线新免费视频 伊人影院在线大香 大香蕉成人伊人在线视频 青青草成人在线视频观看 91国产自拍偷拍视频 青青草色爱久久 精品国产自拍 小色狗 琪琪热热色无码 影音先锋大香蕉久草资源 小明视频看看成人免费 俺去了色网婷婷色 久久色情片 超碰在线青青草 欧美激情图片 自拍超碰 久草视频在线 天天 综合色伊人网 大香蕉视频成人中文网 大香蕉伊人欧美色 久热在线播放中文字幕 青青草久草福利 欧美色色大香焦 欧美色热图 亚洲香蕉手机在线观看视频 偷拍偷窥自拍网站 超91在线观看 最新奇米奇色777在线 婷婷网站 微拍秒拍福利视频 自拍在线 精品视频 欧美情色无码在线 久草激情视频 午夜高清影院在线观看 第四色青娱乐奇米影视 青青草在线综合 99热这里有精品 自拍偷拍影音先锋 国产自拍 先锋影音 成人在线视频97 久草在线免费观看大香蕉 99er久久国产精品在线
    久久草2019在线观看 99这里有精品 大香蕉免费公开青青草 狠狠色丁香婷婷综合 国产久草福利手机在线 青青草黄色三级网站 大香蕉他也啪 青青草视频大香蕉伊人网 久久爱大香焦在线视频 日本有码视频 成人视屏 国产精品91在线 91国产自拍小视频 伊人狼人香蕉网小说 青青草香蕉草久在线 av青青操 亚洲自拍欧美 91 国产 在线 97超碰资源共享 青青草伊人大香蕉 奇米四色网 国産偷拍91 精品国产在线自拍 伊人大香蕉色琪琪影院 caoprom超碰 青青视频在线视频 开心五月婷婷色婷在线 第四色色 Caoprom超碰视频 亚洲图片欧美图色姐 天天干情色网 操妹妹干妹妹 丁香五月婷婷伊人大香蕉 国产精品自拍偷拍在线 青青青成人社区 成人av在线 碰碰视频在线免费播放 影音先锋 小说色 久久草大香蕉 亚洲情色狼人网 思思久久re热线播放 久久草超碰 播播影院私人影院 大香蕉他也啪 米奇影视 成人国产老鸭窝 伊人大香蕉久久天天啪 男人的天堂 国产精品自偷拍 很很鲁在线97