小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 印度阿三17 2019-07-20

目錄

?

一、springboot與消息隊列

1、消息隊列的應用場景

2、消息隊列簡介

二、RabbitMQ簡介

核心概念

?三、rabbitMQ運行機制

?四、RabbitMQ整合

安裝rabbitmq

?創(chuàng)建交換機

?創(chuàng)建隊列

將相關隊列綁定到交換器上

?測試exchange.direct

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

?測試exchange.topic


一、springboot與消息隊列

1、消息隊列的應用場景

?

2、消息隊列簡介

1)大多應用,可通過消息服務中間件來提示系統(tǒng)異步通信、擴展解耦能力

2)消息服務中兩個重要概念:

消息代理和目的地

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

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

1、隊列(queue):點對點消息通信(point-to-point)

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

4)點對點式:

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

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

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

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

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

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

7)AMQP(Advanced Message Queuing Protocol)

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

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

?8)spring支持

-spring-jms提供了對JMS的支持

-spring-rabbit提供了對AMQP的支持

-需要ConnectionFactory的實現(xiàn)來連接消息代理

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

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

-@EnableJms、@EnableRabbit開啟支持

9)springboot自動配置

-JmsAutoConfiguration

-RabbitAutoConfiguration

?

二、RabbitMQ簡介

RabbitMQ是一個由erlang開發(fā)的AMQP的開源實現(xiàn)。

核心概念

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

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

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

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

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

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

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

consumer:消息的消費者,表示一個從消息隊列中取得消息的客戶端應用程序。

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

Broker:表示消息隊列服務器實體

?三、rabbitMQ運行機制

AMQP中的消息路由

AMQP中消息的路由過程和java開發(fā)者熟悉的JMS存在一些差別,AMQP中增加了Exchange和Binding的角色。生產(chǎn)者把消息發(fā)布到Exchange上,消息最終到達隊列并被消費者接收,而Binding決定交換器的消息應用發(fā)送到那個隊列。

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

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

模糊通信:topic交換器通過模式匹配分配消息的路由鍵屬性,將路由鍵和某個模式進行匹配,此時隊列需要綁定到一個模式上,這些單詞之間點隔開。它同樣也會識別兩個通配符:符號“#”和符號“*”。#匹配0個或多個單詞,*匹配一個單詞。

?四、RabbitMQ整合

1、引入spring-boot-starter-amqp

2、application.yml配置

3、測試rabbitMQ

1.AmqpAdmin:管理組件

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

?

安裝rabbitmq

?

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

訪問

賬號:guest

密碼:guest

信息發(fā)送的結構圖

?創(chuàng)建交換機

Durable:下次在登錄的時候還會存在該虛擬機

?同理一共添加三個交換機

?創(chuàng)建隊列

?同理添加四個隊列

?交換機進行綁定響應的隊列

將相關隊列綁定到交換器上

?最后將四個隊列全部綁定到交換器中

另外一個也綁定上這四個queue

?

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

?測試exchange.direct

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

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

?進入到該隊列中

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

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

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

?測試exchange.topic

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

?在測試

?只有兩個符合

?

來源:https://www./content-4-340951.html

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多