日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

SpringBoot成神之路--21.消息隊(duì)列簡(jiǎn)介及RabbitMQ的安裝與使用(一)

 印度阿三17 2019-07-20

目錄

?

一、springboot與消息隊(duì)列

1、消息隊(duì)列的應(yīng)用場(chǎng)景

2、消息隊(duì)列簡(jiǎn)介

二、RabbitMQ簡(jiǎn)介

核心概念

?三、rabbitMQ運(yùn)行機(jī)制

?四、RabbitMQ整合

安裝rabbitmq

?創(chuàng)建交換機(jī)

?創(chuàng)建隊(duì)列

將相關(guān)隊(duì)列綁定到交換器上

?測(cè)試exchange.direct

?測(cè)試exchange.fanout(廣播發(fā)送)

?測(cè)試exchange.topic


一、springboot與消息隊(duì)列

1、消息隊(duì)列的應(yīng)用場(chǎng)景

?

2、消息隊(duì)列簡(jiǎn)介

1)大多應(yīng)用,可通過(guò)消息服務(wù)中間件來(lái)提示系統(tǒng)異步通信、擴(kuò)展解耦能力

2)消息服務(wù)中兩個(gè)重要概念:

消息代理和目的地

但消息發(fā)送者發(fā)生消息以后,將由消息代理接管,消息代理保證消息傳遞到指定目的地。

3)消息隊(duì)列主要有兩種形式的目的地

1、隊(duì)列(queue):點(diǎn)對(duì)點(diǎn)消息通信(point-to-point)

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

4)點(diǎn)對(duì)點(diǎn)式:

-消息發(fā)送者發(fā)送消息,消息代理將其放入一個(gè) 隊(duì)列中,消息接收者從隊(duì)列中獲取消息內(nèi)容,消息讀取后被移除隊(duì)列

-消息只有唯一的發(fā)送者和接收者,但并不是說(shuō)只能有一個(gè)接收者

5)發(fā)布訂閱式:

-發(fā)送者(發(fā)布者)發(fā)送消息到主題,多個(gè)接收者(訂閱者)監(jiān)聽(tīng)(訂閱)這個(gè)主題,那么就會(huì)在消息到達(dá)同時(shí)接收消息

6)JMS(java message service)JAVA消息服務(wù):

-基于JVM消息代理的規(guī)范。ActiveMQ、HometMQ是JMS實(shí)現(xiàn)

7)AMQP(Advanced Message Queuing Protocol)

-高級(jí)消息隊(duì)列協(xié)議,也是一個(gè)消息代理的規(guī)范,兼容JMS

-RabbitMQ是AMQP的實(shí)現(xiàn)

?8)spring支持

-spring-jms提供了對(duì)JMS的支持

-spring-rabbit提供了對(duì)AMQP的支持

-需要ConnectionFactory的實(shí)現(xiàn)來(lái)連接消息代理

-提供JmsTemplate、rabbittemplate來(lái)發(fā)送消息

-@JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上監(jiān)聽(tīng)消息代理發(fā)布的消息

-@EnableJms、@EnableRabbit開(kāi)啟支持

9)springboot自動(dòng)配置

-JmsAutoConfiguration

-RabbitAutoConfiguration

?

二、RabbitMQ簡(jiǎn)介

RabbitMQ是一個(gè)由erlang開(kāi)發(fā)的AMQP的開(kāi)源實(shí)現(xiàn)。

核心概念

message:消息。它是由消息頭和消息體組成。消息體是不透明的,而消息投則由一系列的可選屬性組成,這些屬性包括routing-key(路由鍵)、priority(相對(duì)于其他消息的優(yōu)先權(quán))、delivery-mode(之處該消息可能需要持久性存儲(chǔ))等。

publisher:消息的生產(chǎn)者,也是一個(gè)向交換器發(fā)布消息的客戶端應(yīng)用程序。

exchange:交換器,用來(lái)接收生產(chǎn)者發(fā)送的消息并將這些消息路由給服務(wù)器中的隊(duì)列。它有四種類型:direct(默認(rèn))、fanout、topic和headers,不同類型的exchange轉(zhuǎn)發(fā)消息的策略有所區(qū)別

queue:消息隊(duì)列,用來(lái)保存消息知道發(fā)送到消費(fèi)者。它是消息的容器,也是消息的終點(diǎn)。一個(gè)消息可投入一個(gè)或多個(gè)隊(duì)列。消息一直在隊(duì)列里面,等待消費(fèi)者連接到這個(gè)隊(duì)列將其取走。

binding:綁定,用于消息隊(duì)列和交換器之間的關(guān)聯(lián)。一個(gè)綁定就是基于路由鍵將交換器和消息隊(duì)列連接起來(lái)的路由規(guī)則,所以可以將交換器理解成一個(gè)由綁定構(gòu)成的路由表。

connection:網(wǎng)絡(luò)連接,比如一個(gè)TCP連接。

channel:信道,多路復(fù)用連接中的一條獨(dú)立的雙向數(shù)據(jù)流通道。信道是建立在真實(shí)的TCP連接內(nèi)的虛擬連接,AMQP命令都是通過(guò)信道以發(fā)出去的,不管是發(fā)布消息、訂閱隊(duì)列還是接收消息,這些動(dòng)作都是通過(guò)信道完成,因?yàn)閷?duì)于操作系統(tǒng)來(lái)說(shuō)建立和銷毀TCP都是非常昂貴的開(kāi)銷,所以引入了信道的概念,以復(fù)用一條TCP連接。

consumer:消息的消費(fèi)者,表示一個(gè)從消息隊(duì)列中取得消息的客戶端應(yīng)用程序。

virtual host:虛擬主機(jī),表示一批交換器、消息隊(duì)列和相關(guān)對(duì)象。虛擬主機(jī)是共享相同的身份認(rèn)證和加密環(huán)境的獨(dú)立服務(wù)器域。每個(gè)Vhost本質(zhì)上就是一個(gè)mini版的rabbitMQ服務(wù)器,擁有自己的隊(duì)列、交換器、綁定和權(quán)限機(jī)制。Vhost是AMQP概念的基礎(chǔ),必須在連接時(shí)指定,rabbitMQ默認(rèn)的Vhost是/。

Broker:表示消息隊(duì)列服務(wù)器實(shí)體

?三、rabbitMQ運(yùn)行機(jī)制

AMQP中的消息路由

AMQP中消息的路由過(guò)程和java開(kāi)發(fā)者熟悉的JMS存在一些差別,AMQP中增加了Exchange和Binding的角色。生產(chǎn)者把消息發(fā)布到Exchange上,消息最終到達(dá)隊(duì)列并被消費(fèi)者接收,而B(niǎo)inding決定交換器的消息應(yīng)用發(fā)送到那個(gè)隊(duì)列。

?點(diǎn)對(duì)點(diǎn)通信:消息中的路由鍵(routing key)如果和binding中的binding key一致,交換器就將消息發(fā)到對(duì)應(yīng)的隊(duì)列中。路由鍵與隊(duì)列名完全匹配,如果一個(gè)隊(duì)列綁定到交換機(jī)要求路由鍵為“dog”,則只轉(zhuǎn)發(fā)routing key 標(biāo)記為“dog”的消息,不會(huì)轉(zhuǎn)發(fā)“dog.puppy”,也不會(huì)轉(zhuǎn)發(fā)“dog.guard”等等。它是完全匹配、單播的模式。

廣播通信:每個(gè)發(fā)到fanout類型交換器的消息都會(huì)分到所有綁定的隊(duì)列上去。fanout交換器不處理路由鍵,只是簡(jiǎn)單的將隊(duì)列綁定到交換器上,每個(gè)發(fā)送到交換器的消息都會(huì)被轉(zhuǎn)發(fā)到與該交換器綁定的所有隊(duì)列上。很像子網(wǎng)廣播,每臺(tái)子網(wǎng)內(nèi)的主機(jī)都獲得了一份復(fù)制的消息。fanout類型轉(zhuǎn)發(fā)消息是最快的

模糊通信:topic交換器通過(guò)模式匹配分配消息的路由鍵屬性,將路由鍵和某個(gè)模式進(jìn)行匹配,此時(shí)隊(duì)列需要綁定到一個(gè)模式上,這些單詞之間點(diǎn)隔開(kāi)。它同樣也會(huì)識(shí)別兩個(gè)通配符:符號(hào)“#”和符號(hào)“*”。#匹配0個(gè)或多個(gè)單詞,*匹配一個(gè)單詞。

?四、RabbitMQ整合

1、引入spring-boot-starter-amqp

2、application.yml配置

3、測(cè)試rabbitMQ

1.AmqpAdmin:管理組件

2.rabbitTemplate:消息發(fā)送處理組件

?

安裝rabbitmq

?

?第一個(gè)是端口是暴露給外部的端口,第二個(gè)端口是管理界面的端口

訪問(wèn)

賬號(hào):guest

密碼:guest

信息發(fā)送的結(jié)構(gòu)圖

?創(chuàng)建交換機(jī)

Durable:下次在登錄的時(shí)候還會(huì)存在該虛擬機(jī)

?同理一共添加三個(gè)交換機(jī)

?創(chuàng)建隊(duì)列

?同理添加四個(gè)隊(duì)列

?交換機(jī)進(jìn)行綁定響應(yīng)的隊(duì)列

將相關(guān)隊(duì)列綁定到交換器上

?最后將四個(gè)隊(duì)列全部綁定到交換器中

另外一個(gè)也綁定上這四個(gè)queue

?

?exchange.topic交換器上綁定好四個(gè)隊(duì)列,命名規(guī)則采用*.和.#

?測(cè)試exchange.direct

在exchange.direct發(fā)送消息到指定routing key(由于direct交換器模式是單播形式,只有完全對(duì)于了routing key的才能夠匹配上)

?可以看到對(duì)應(yīng)的隊(duì)列中已經(jīng)存在相應(yīng)的消息了

?進(jìn)入到該隊(duì)列中

?查看該條數(shù)據(jù)

?測(cè)試exchange.fanout(廣播發(fā)送)

?刷新隊(duì)列,發(fā)現(xiàn)每個(gè)隊(duì)列都存在一個(gè)剛剛發(fā)送的消息

?測(cè)試exchange.topic

我們可以根據(jù)之前的規(guī)則,下面的四個(gè)都能匹配上?

?在測(cè)試

?只有兩個(gè)符合

?

來(lái)源:https://www./content-4-340951.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多