欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:rabbitmq

柚子快報激活碼778899分享:rabbitmq

http://yzkb.51969.com/

1.消息服務(wù)概述、rabbitmq核心概念

????????????? 消息服務(wù)概述:

???????????????????? 大多數(shù)應(yīng)用中,可通過消息服務(wù)中間件來提升系統(tǒng)異步通信,擴展解耦能力

???????????????????? 兩個重要概念:消息代理(message broker)和目的地(destination)。當(dāng)消息發(fā)送者者發(fā)出消息后,將由消息代理接管,消息代理保證將消息傳遞至目的地

???????????????????? 兩種形式的目的地:

??????????????????????????? 隊列(queue):點對點的消息通信(point-to-point)

??????????????????????????? 主題(topic):發(fā)布(publish)/訂閱(subscribe)的消息通信

???????????????????? 點對點式:消息發(fā)送者發(fā)送消息,消息代理將消息放在一個隊列中,消息接收者從隊列中獲取內(nèi)容,消息讀取后移除隊列。消息只有唯一的發(fā)送者和接收者。但接收者并未說明只能有1個。

???????????????????? 發(fā)布訂閱式:發(fā)送者發(fā)送消息到主題,多個訂閱者(接收者)監(jiān)聽(訂閱)這個主題,會在消息到達時同時收到消息

???????????????????? 兩種消息代理規(guī)范:

??????????????????????????? JMS(Java-Message-Service)Java消息服務(wù):基于JVM消息代理的規(guī)范,ActiveMQ、HornetMQ是JMS實現(xiàn)

??????????????????????????? AMQP(Advanced Message Queuing Protocol)高級消息隊列協(xié)議:消息代理規(guī)范,兼容JMS,RabbitMQ是AMQP的實現(xiàn)

???????????????????? spring支持:spring提供了對JMS的支持,spring-rabbit提供可對AMQP的支持,需要ConnectionFactory的實現(xiàn)來連接消息代理,提供JmsTemplate、RabbitTemplate來發(fā)送消息,

????????????????????????????????????????? @JmsListenet、@RabbitListener在方法上監(jiān)聽消息代理發(fā)送的消息,@EnableJms、@EnableRabbit開啟支持

????????????? 消息服務(wù)可解決問題

???????????????????? 異步處理:

??????????????????????????? 示例場景:用戶注冊,注冊成功之后給用戶郵箱及短信發(fā)送注冊成功,注冊、發(fā)送郵件、發(fā)送短信分別耗時50ms

??????????????????????????? 串行模式:注冊->發(fā)送郵件->發(fā)送短信 共計耗時150ms

??????????????????????????? 并行模式:注冊->發(fā)送郵件、發(fā)送短信 共計耗時100ms

??????????????????????????? 分析優(yōu)化思路:郵件和短信只是一個通知,并非客戶端所必須的,因此注冊成功之后即可告知客戶端注冊成功,客戶端沒必要等著收到郵件和短信后才顯示注冊成功

??????????????????????????? 消息隊列:注冊->消息隊列->發(fā)送短信/發(fā)送郵件? 共計耗時55ms.

??????????????????????????? 引入消息隊列后,用戶響應(yīng)時間即 寫入數(shù)據(jù)庫的時間+寫入消息隊列的時間(可忽略不計)。

??????????????????????????? 引入消息隊列后,用戶響應(yīng)時間是串行模式的3倍,是并行模式的2倍

???????????????????? 應(yīng)用解耦

??????????????????????????? 場景:雙11購物節(jié),用戶下單后,訂單系統(tǒng)告知庫存系統(tǒng)

??????????????????????????? 傳統(tǒng)做法:訂單系統(tǒng)調(diào)用庫存系統(tǒng)的接口,但是此方法有缺點:一旦庫存系統(tǒng)出現(xiàn)故障,訂單就會失??;訂單系統(tǒng)和庫存系統(tǒng)高耦合

??????????????????????????? 引入消息隊列:用戶下單后,訂單系統(tǒng)完成持久化處理,將消息寫入消息隊列,返回用戶下單成功;庫存系統(tǒng)監(jiān)聽消息隊列,收到消息之后,進行庫存相關(guān)操作。就算庫存系統(tǒng)出現(xiàn)故障,消息隊列也會能保證消息的可靠推送,不會導(dǎo)致消息丟失。

???????????????????? 流量削峰:秒殺活動中應(yīng)用廣泛

??????????????????????????? 場景:秒殺活動,一般流量較大,導(dǎo)致應(yīng)用過大,解決此問題可引入消息隊列

??????????????????????????? 作用:控制活動人數(shù),超過一定閾值的訂單直接丟棄;緩解短時間的高流量壓垮應(yīng)用。

??????????????????????????? 流程:用戶發(fā)起請求后,將消息寫入消息隊列,如果消息隊列長度超過最大值,則直接拋棄用戶請求或跳轉(zhuǎn)到錯誤界面。秒殺業(yè)務(wù)系統(tǒng)監(jiān)聽消息隊列中的數(shù)據(jù),根據(jù)其做后續(xù)處理

????????????? rabbitmq概述

???????????????????? MQ(Message Queue):是一種分布式應(yīng)用程序的通信方法,是消費者-生產(chǎn)者模型的典型代表,

???????????????????? 生產(chǎn)者(producer)往消息隊列中不斷寫入消息,consumer則讀取或訂閱隊列的消息,這點和隊列類似,具有FIFO(先入先出)的特點

???????????????????? 消息隊列:在消息隊列模型中,可劃分為3個角色,Producer、Queue、Consumer

??????????????????????????? Producer:生產(chǎn)者,往消息隊列中添加數(shù)據(jù)的角色

??????????????????????????? Queue:隊列,為承載消息的容器。不是棧是因為想使消息先進先出,有序。棧是先進后出

??????????????????????????? Consumer:消費者,從消息隊列中獲取數(shù)據(jù)的角色

???????????????????? 理解消息隊列:

??????????????????????????? 例如用戶下單購買商品,商家將商品訂單發(fā)給快遞公司,快遞公司根據(jù)商品中買家的信息分發(fā)對應(yīng)的買家

??????????????????????????? 在上述過程中,商品作為消息,商家作為消息的生產(chǎn)者,快讀公司作為隊列,買家作為消費者。

??????????????????????????? 快遞公司根據(jù)包裹中買家的地址和電話鎖定買家。因此消息隊列中隊列和消費者也需要一個映射規(guī)則,實現(xiàn)Message和Consumer之間的路由

???????????????????? RabbitMQ基本概念

??????????????????????????? Mseeage:消息,包含消息頭(附屬配置信息)和消息體(消息實體內(nèi)容),消息體是不透明的,

????????????????????????????????????????? ?消息體是由一些可選屬性組成,包括路由鍵(routing-key)、優(yōu)先級(priority)、持久化存儲(delivery-mode)等

??????????????????????????? Publisher:消息生產(chǎn)者,向交換機發(fā)布信息的程序

??????????????????????????? Exchange:交換機,接收生產(chǎn)者發(fā)送的消息并將這些消息路由給服務(wù)器中的消息隊列

?????????????????????????????????? 常見3種交換器:direct、fanout、topic

????????????????????????????????????????? direct:發(fā)布與訂閱,完全匹配

????????????????????????????????????????? fanout:廣播,所有訂閱該廣播的隊列都可以收到該消息

????????????????????????????????????????? topic:主題,規(guī)則匹配

??????????????????????????? Queue:消息隊列,保存消息直到發(fā)送給消費者。消息容器,也是消息的終點,一個消息可投入一個或多個消息隊列,消息一直在隊列中,直到消費者將消息取走。

??????????????????????????? Binding:綁定,用于給Exchange和Queue建立關(guān)系,把交換機和消息隊列通過路由規(guī)則綁定起來,可以是多對多關(guān)系

??????????????????????????? Connection:網(wǎng)絡(luò)連接

??????????????????????????? Channel:信道,消息隊列和外部聯(lián)系都是通過信道。消息通過Channel塞進隊列或流出隊列。客戶端每個連接中,可有多個Channel。

????????????????????????????????????????? 因為系統(tǒng)中建立和銷毀TCP連接都是非常昂貴的開銷,因此引入信道,來復(fù)用一條TCP連接。

??????????????????????????? Consumer:消費者,從消息隊列中獲取消息的客戶端程序

??????????????????????????? Virtual Host:虛擬主機,表示一批交換器、消息隊列和相關(guān)對象。一個broker中可以有多個host,用作不同用戶的權(quán)限分離

??????????????????????????? Broker:消息隊列服務(wù)器實體,維護一條生產(chǎn)者到消費者的路線,保證數(shù)據(jù)從按照指定方式傳輸。

???????????????????? 通信過程:

??????????????????????????? 生產(chǎn)者(Producer)生產(chǎn)消息,消息通過Channel(信息)發(fā)送給Broker(服務(wù)器主體),Broker再分配給一個Exchange(交換機)

??????????????????????????? Exchange收到消息后,根據(jù)消息中的routingkey(路由鍵),將消息轉(zhuǎn)發(fā)給匹配的QUEUE(消息隊列)

??????????????????????????? QUEUE收到消息后,將消息通過Channel(信道)發(fā)送給消費者(Consumer)

??????????????????????????? Consumer收到消息后,發(fā)送ACK(確認標志)給消息隊列確認收到消息

??????????????????????????? Queue收到ACK后,刪除消息隊列中緩存的此條消息

??? 2.rabbitmq運行機制、rabbitmq支持的六種運行模式

????????????? rabbitmq運行機制

???????????????????? AMQP中消息的路由:

??????????????????????????? 過程和JMS存在一些差別,AMQP中引入了Exchange和Binging的概念

??????????????????????????? 生產(chǎn)者將消息發(fā)布道Exchange上,消息最終達到隊列并被消費者接收,Binding決定了交換器的消息應(yīng)該發(fā)送道那個隊列。

???????????????????? Exchange類型:

????????????????????????? 分發(fā)消息時,根據(jù)類型的不同分發(fā)策略有區(qū)別,目前共計4中:direct、fanout、topic、headers。headers和direct完全一致,但性能差很多,幾乎用不到。

??????????????????????????? Direct Exchange:消息中的路由鍵和Binding中的binding key一致(完全匹配),交換器就將消息發(fā)到對應(yīng)的隊列中。完全匹配,單播的模式

??????????????????????????? Fanout Exchange:每個發(fā)到Fanout Exchange上的消息都會分發(fā)到所有綁定的隊列上,不處理路由鍵,轉(zhuǎn)發(fā)消息最快

??????????????????????????? Topic Exchange:通過模式匹配分配消息的路由鍵屬性,將路由鍵和某個模式匹配,此時隊列需要綁定再一個模式上。

????????????? RabbitMQ支持的消息類型

???????????????????? 直連模式:生產(chǎn)者-消息隊列-消費者

???????????????????? work queue工作模式:也成為Task Queues 任務(wù)模型。

??????????????????????????? 當(dāng)處理消息較多時,可能生產(chǎn)消息速度遠大于消費速度,消息隊列中消息會越積越多,無法及時處理,此時可使用work模型,讓多個消費者綁定道一個隊列,共同消費隊列中的主體。

??????????????????????????? 隊列中的消息一旦消費,就會消失,不會重復(fù)消費

??????????????????????????? 生產(chǎn)者-消息隊列-多個消費者

???????????????????? Publish/Subscribe 發(fā)布/訂閱模式 (廣播模式)

??????????????????????????? fanout 扇出,也稱廣播

??????????????????????????? 廣播模式中,消費發(fā)送流程是:可有多個消費者;每個消費者有自己的隊列;每個隊列都要綁定同一個交換機;

??????????????????????????? 生產(chǎn)者發(fā)送消息,只能發(fā)到交換機,交換機決定發(fā)到那個隊列,生產(chǎn)者無法決定

??????????????????????????? 交換機將消息發(fā)送給綁定的所有隊列

??????????????????????????? 隊列的消費者都能拿到消息,實現(xiàn)1個消息被多個消費者消費

??????????????????????????? 總結(jié):一個生產(chǎn)者綁定一個交換機,1個交換機綁定多個隊列,每個隊列都有對應(yīng)的消費者,有幾個消息隊列就有幾個消費者。

?????????????????????????????????? ? 從而實現(xiàn)交換機將消息發(fā)給所有消息隊列,1個消息被多個消費者接收

???????????????????? Routing 路由模式

??????????????????????????? Exchange類型為Direct,可實現(xiàn)不同消息被不同的隊列消費

??????????????????????????? 在direct 模型下,

??????????????????????????? 消息發(fā)送方向exchange發(fā)送消息時,必須指定消息的routingkey

??????????????????????????? exchange和隊列的綁定,不是任意綁定,而是指定一個routingkey(路由key),

??????????????????????????? exchange不再將消息平等地給每一個隊列,而是根據(jù)消息的routingkey進行判斷,只有隊列的routingkey和消息的routingkey完全一致,才會將消息給到指定隊列

??????????????????????????? 總結(jié):生產(chǎn)者向exchange發(fā)送消息指定routingkey,exchange收到消息后,將消息遞交給與routingkey完全匹配的隊列;每個隊列都有各自的消費者;每個消費者消費各自綁定隊列的消息

???????????????????? Topics模式

??????????????????????????? Exchange的類型為topic,可根據(jù)消息中的routingkey匹配道不同的隊列,區(qū)別在于routingkey綁定隊列時,可使用通配符進行模糊匹配。

??????????????????????????? 此模式routingkey一般由1個或多個單詞組成,單詞之間由于"."分隔。例如item.insert

??????????????????????????? 通配符:*(匹配1個詞),#(匹配1個或多個詞)

???????????????????? RPC模式

??????????????????????????? 客戶端遠程調(diào)用服務(wù)方法,使用MQ可以實現(xiàn)RPC的異步調(diào)用,基于Direct交換機實現(xiàn),流程如下:

??????????????????????????? 客戶端既是生產(chǎn)者又是消費者,向RPC請求隊列發(fā)送RPC調(diào)用消息,同時監(jiān)聽RPC響應(yīng)隊列

??????????????????????????? 服務(wù)端監(jiān)聽RPC請求隊列的消息,收到消息后執(zhí)行服務(wù)端的方法,得到方法返回的結(jié)果

??????????????????????????? 服務(wù)端將RPC方法返回的結(jié)果發(fā)送至RPC響應(yīng)隊列

??????????????????????????? 客戶端監(jiān)聽RPC響應(yīng)隊列,接收到RPC響應(yīng)結(jié)果

??? 3.springboot整合rabbitmq

????????????? 安裝rabbitmq

????????????? springboot整合rabbitmq

???????????????????? 目的(核心使用方法):使用RabbitTemplate發(fā)送和接收消息

???????????????????? 實現(xiàn)步驟r

??????????????????????????? 創(chuàng)建項目,引入spring for rabbitmq的依賴;

??????????????????????????? 創(chuàng)建RabbitAutoConfiguration 自動配置類,并配置自動連接工廠ConnectionFactory

??????????????????????????? 創(chuàng)建RabbitProperties配置類,封裝RabbitMQ的配置

??????????????????????????? RabbitTemplate給RabbitMQ發(fā)送和接收消息

??????????????????????????? 使用@RabbitListener和@EnableRabbit來監(jiān)聽消息隊列

??????????????????????????? AmqpAdmin是RabbitMQ系統(tǒng)管理功能組件(在代碼中創(chuàng)建交換機、消息隊列、綁定規(guī)則)

??? 4.rabbitmq-六種工作模式、springboot整合rabbitmq

????????????? rabbitmq入門程序

???????????????????? 發(fā)送端程序:創(chuàng)建連接,創(chuàng)建通道,聲明隊列,發(fā)送消息

???????????????????? 接收端程序:創(chuàng)建連接,創(chuàng)建通道,聲明隊列,監(jiān)聽隊列,接收消息

????????????? work queue工作模式

???????????????????? 兩個消費端共同消費同一個消息隊列中的數(shù)據(jù)

???????????????????? 應(yīng)用場景:對于任務(wù)較重或任務(wù)較多情況下,使用工作隊列可以提高任務(wù)處理速度

???????????????????? 實現(xiàn)關(guān)鍵:多個消費者監(jiān)聽同一個隊列,1條消息只會被1個消費者接收,rabbitmq采用輪詢方式將消息平均發(fā)給消費者,消費者處理完某條消息后,才會收到下條消息

????????????? Publish/Subscribe 發(fā)布訂閱模式

???????????????????? 每個消費者監(jiān)聽自己的隊列;生產(chǎn)者發(fā)送消息給broker后,由交換機將消息轉(zhuǎn)發(fā)到綁定此交換機的每個隊列,每個綁定交換機的隊列都可以接收到數(shù)據(jù)

?????? ????????????? 實現(xiàn)關(guān)鍵:交換機將消息發(fā)送給綁定交換機的所有消息隊列

????????????? Routing 路由模式

???????????????????? 每個消費者監(jiān)聽自己的隊列,并設(shè)置routingkey;生產(chǎn)者發(fā)送消息給交換機,交換機根據(jù)routingkey發(fā)送消息給指定的消息隊列,從而實現(xiàn)不同消費者消費不同的消息

???????????????????? 實現(xiàn)關(guān)鍵:交換機和隊列綁定指定路由鍵,發(fā)送消息時指定路由鍵,則發(fā)給指定的隊列。從而實現(xiàn)指定消費者消費發(fā)給指定隊列的消息

????????????? Topic模式

???????????????????? 每個消費者監(jiān)聽自己的隊列,并設(shè)置帶有通配符的routingkey;生產(chǎn)者發(fā)送消息給beoker,交換機根據(jù)routingkey發(fā)送消息給指定的消息隊列,從而實現(xiàn)不同消費者消費不同的消息

???????????????????? 實現(xiàn)關(guān)鍵:交換機給隊列綁定指定含通配符的路由鍵,發(fā)送消息時指定路由鍵,則發(fā)給指定的隊列,從而實現(xiàn)消費者消費發(fā)給指定隊列的消息

????????????? Header模式

???????????????????? 與routingkey區(qū)別在于,取消了routingkey,使用header中的key/value匹配隊列

???????????????????? 示例:根據(jù)用戶的通知設(shè)置去通知用戶,設(shè)置只接收email的用戶只接收email,只接收sms的用戶只接收sms。但是性能較低,故使用較少

????????????? RPC

???????????????????? 客戶端遠程調(diào)用方法,使用MQ可實現(xiàn)RPC的異步調(diào)用,基于Direct交換機實現(xiàn),流程如下:

???????????????????? 客戶端既是生產(chǎn)者又是消費者,向RPC請求隊列發(fā)送RPC調(diào)用消息,同時監(jiān)聽RPC響應(yīng)隊列

???????????????????? 服務(wù)端監(jiān)聽RPC請求隊列的消息,收到消息后執(zhí)行服務(wù)端的方法,得到方法返回的結(jié)果

???????????????????? 服務(wù)端將RPC方法返回的結(jié)果發(fā)送至RPC響應(yīng)隊列

???????????????????? 客戶端監(jiān)聽RPC響應(yīng)隊列,接收到RPC響應(yīng)結(jié)果

????????????? springboot整合rabbitmq

???????????????????? 創(chuàng)建rabbitmq配置類,類中定義隊列常量、交換機常量、路由鍵常量,聲明交換機、聲明隊列、綁定交換機和隊列

???????????????????? 啟動類添加注解@EnableRabbit開啟支持

???????????????????? 消息接收方法上使用@RabbitListener(queue={隊列名稱})監(jiān)聽指定隊列

柚子快報激活碼778899分享:rabbitmq

http://yzkb.51969.com/

參考閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19490542.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄