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

首頁綜合 正文
目錄

柚子快報激活碼778899分享:消息隊列:RabbitMQ

柚子快報激活碼778899分享:消息隊列:RabbitMQ

http://yzkb.51969.com/

目錄

1、什么是rabbitMQ

1.1、AMQP

1.2幾種MQ的對比

?編輯

2、快速入門

2.1、安裝RabbitMQ(使用虛擬機(jī)安裝)

2.2、使用RabbitMQ準(zhǔn)備

2.3、交換機(jī)(Exchange)的概念

2.3.1、交換機(jī)作用

2.3.2、交換機(jī)的四種類型

一、直連交換機(jī)?Direct exchange

二、主題交換機(jī)? Topic exchange?

三、扇形交換機(jī)??Fanout exchange

四、首部交換機(jī)? Headers exchange

默認(rèn)交換機(jī)

死信交換機(jī)

3、交換機(jī)代碼實例

4、死信交換機(jī)的延申

4.1、死信隊列 (延遲隊列)

1、什么是rabbitMQ

一款基于AMQP用于軟件之間通信的中間件 。消費(fèi)并不需要確保提供方存在,實現(xiàn)了服務(wù)之間的高度解耦

1.1、AMQP

Advanced Message Queue,高級消息隊列協(xié)議。它是應(yīng)用層協(xié)議的一個開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計,基于此協(xié)議的客戶端與消息中間件可傳遞消息,并不受產(chǎn)品、開發(fā)語言等條件的限制。

1.2幾種MQ的對比

2、快速入門

2.1、安裝RabbitMQ(使用虛擬機(jī)安裝)

???先下拉鏡像

docker pull rabbitmq:management

? 運(yùn)行一個容器把RabbitMQ運(yùn)行起來? 開放端口 15672(管理)? ?5672客戶端使用

docker run -d \

--name my-rabbitmq \

-p 5672:5672 -p 15672:15672 \

-v /home/rabbitmq:/var/lib/rabbitmq \

--hostname my-rabbitmq-host \

-e RABBITMQ_DEFAULT_VHOST=my_vhost \

-e RABBITMQ_DEFAULT_USER=admin \

-e RABBITMQ_DEFAULT_PASS=admin \

--restart=always \

rabbitmq:management

參數(shù)說明:

--hostname:主機(jī)名(RabbitMQ的一個重要注意事項是它根據(jù)所謂的 “節(jié)點名稱” 存儲數(shù)據(jù),默認(rèn)為主機(jī)名)

?-e:指定環(huán)境變量:

RABBITMQ_DEFAULT_VHOST:默認(rèn)虛擬機(jī)名

RABBITMQ_DEFAULT_USER:默認(rèn)的用戶名

RABBITMQ_DEFAULT_PASS:默認(rèn)用戶名的密碼

2.2、使用RabbitMQ準(zhǔn)備

所需依賴

org.springframework.boot

spring-boot-starter-amqp

yml文件配置

2.3、交換機(jī)(Exchange)的概念

2.3.1、交換機(jī)作用

在RabbitMQ中,生產(chǎn)者發(fā)送消息不會直接將消息投遞到隊列中,而是先將消息投遞到交換機(jī)中,?在由交換機(jī)轉(zhuǎn)發(fā)到具體的隊列,?隊列再將消息以推送或者拉取方式給消費(fèi)者進(jìn)行消費(fèi)

2.3.2、交換機(jī)的四種類型

一、直連交換機(jī)?Direct exchange

直連交換機(jī)的路由算法非常簡單:?將消息推送到binding?key與該消息的routing key相同的隊列。

? ? ??

直連交換機(jī)X上綁定了兩個隊列。第一個隊列綁定了綁定o鍵range, 第二個隊列有兩個綁定鍵: black和green。

在這種場景下,一 個消息在布時指定了路由鍵為orange將會只被路由到隊列Q1 I 路由鍵為black 和green的消息都將被路由到隊列Q2。其他的消息都將被丟失。同一個綁定鍵可以綁定到不同的隊列上去, 可以增加一個交換機(jī)X與隊列Q2的綁定鍵,在這種清況下,直連交換機(jī)將會和廣播交換機(jī)有著相同的行為, 將消息推送到所有匹配的隊列。一個路由鍵為black的消息將會同時被推送到隊列Q1和Q2。

直連交換機(jī)缺點:

直連交換機(jī)的?routing_key方案非常簡單?,如果我們希望一?條消息發(fā)送給多個隊列?,那么這個交換機(jī)需?要綁定上非常多的?routing_key.

假設(shè)每個交換機(jī)上都綁定一堆的?routing_key連接到各個隊列上。那么消息的管理?就會異常地困難。

二、主題交換機(jī)? Topic exchange?

主題交換機(jī)的特點:

發(fā)送到主題交換機(jī)的 消息不能有任意的 routing key, ?必須是由點號分開的一串單詞,這些單詞可以是任意的,但通常是與消息相關(guān)的一些特征。

如以下是幾個有效的routing key:

"stock.usd.nyse", "nyse.vmw", "quick.orange.rabb 代", routing key的單詞可以 有很多,最大限制是255 bytes。

Topic 交換機(jī)的 邏輯與 direct 交換機(jī)有點 相似 使用特定路由鍵發(fā)送的消息 將被發(fā)送到所有使用匹配綁定鍵綁定的隊列 ,然而 ,綁定鍵有兩個特殊的情況:

*表示匹配任意一個單詞#表示匹配任意—個或多個單詞?

如:

routing key quick.orange.rabbit-> queue Ql, Q2

routing key lazy.orange.elephant-> queue Ql,Q2

延申:

當(dāng)一個隊列的綁定鍵是"#",它將會接收所有的消息,而不再考慮所接收消息的路由鍵。當(dāng)一個隊列的綁定鍵沒有用到"#"和'*"時,它又像 direct 交換一樣工作。

三、扇形交換機(jī)??Fanout exchange

特點:

扇形交換機(jī)是最基本的交換機(jī)類型,它所能做的事清非常簡單廣播消息。

扇形交換機(jī)會把能接收到的消息全部發(fā)送給綁定在自己身上的隊列。因為廣播不需要'思考”,所以扇形交換機(jī)處理消息的速度也是所有的交換機(jī)類型里面最快的。

四、首部交換機(jī)? Headers exchange

首部交換機(jī)和扇形交換機(jī)都不需 要路由鍵routingKey,交換機(jī)時通過 Headers 頭部來將消息映射到隊列的 ,有點像 HTTP的 Headers.

Hash結(jié)構(gòu)中要求攜帶一個鍵 "x-match", 這個鍵的Val ue可以是any或者all, 這代表消息攜帶的 Hash是需要全部匹配(all), 還是僅匹配一個鍵(any) 就可以了。相比直連交換機(jī) ,首部交換機(jī)的優(yōu)勢是匹配的規(guī)則不被限定為字符串(string)而是 Object 類型。

all: 在發(fā)布消息時攜帶的所有Entry必須和綁定在隊列上的所有 Entry完全匹配any: 只要在發(fā)布消息時攜帶的有一對鍵值對 headers滿足隊列定義的多個參數(shù) arguments的其中一 個就能 匹配上 ,注意這里是鍵值對的完全匹配,只匹配到鍵了,值卻不—樣是不行的;

默認(rèn)交換機(jī)

實際上是— 個由 RabbitMQ預(yù)先聲明好的名字為空字符串的直連交換機(jī) (direct exchange) 。它有一個特殊的屬性使得它對于簡單應(yīng)用特別有用處 :那就是每個新建隊列 (queue) ?都會自動綁定到默認(rèn)交換機(jī)上,綁定的 路由鍵(routing key) 名稱與隊列名稱相同。

當(dāng)你聲明了一個名為“hello”的隊列,RabbitMQ會自動將其綁定到默認(rèn)交換機(jī)上,綁定(binding)的路由鍵名稱也是為“hello”。

當(dāng)攜帶著名為“hello”的路由鍵的信息被發(fā)送到默認(rèn)交換機(jī)的時候,此消息會被默認(rèn)交換機(jī)路由至名為“hello”的隊列中

類似amq.*的名稱的交換機(jī):這些是RabbitMQ默認(rèn)創(chuàng)建的交換機(jī)。這些隊列名稱被預(yù)留做RabbitMQ內(nèi)部使用,不能被應(yīng)用使用,否則拋出403錯誤

死信交換機(jī)

RabbitMQ作為一個高級消息中間件,提出了死信交換器的概念。

這種交互器專門處理死了的信息(被拒絕可以重新投遞的信息不能算死的)。

消息變成死信一般是以下三種情況:

①、消息被拒絕,并且設(shè)置requeue參數(shù)為false。

②、消息過期(默認(rèn)情況下Rabbit中的消息不過期,但是可以設(shè)置隊列的過期時間和信息的過期的效果)

③、隊列達(dá)到最大長度(一般當(dāng)設(shè)置了最大隊列長度或大小并達(dá)到最大值時)

當(dāng)滿足上面三種情況時,消息會變成死信消息,并通過死信交換機(jī)投遞到相應(yīng)的隊列中。我們只需要監(jiān)聽相應(yīng)隊列,就可以對死信消息進(jìn)行最后的處理。

3、交換機(jī)代碼實例

routhingkey:路由規(guī)則

測試

?使用扇形交換機(jī)時

rabbitTemplate.converAndSend("fanoutExchange","","hello") //中間必填

4、死信交換機(jī)的延申

4.1、死信隊列 (延遲隊列)

死信,在官網(wǎng)中對應(yīng)的單詞為“Dead Letter”,它是 RabbitMQ 的一種消息機(jī)制。 一般來說,生產(chǎn)者將消息投遞到 broker 或者直接到 queue 里了,consumer 從 queue 取出消息進(jìn)行消費(fèi),如果它一直無法消費(fèi)某條數(shù)據(jù),那么可以把這條消息放入死信隊列里面。等待 條件滿足了再從死信隊列中取出來再次消費(fèi),從而避免消息丟失。

死信消息的三種來源: ????1)消息被拒絕(basic.reject(單條))/ basic.nack(多條))并且requeue=false; ? ? 2)消費(fèi)消息時程序出現(xiàn)了異常; ? ? 3)消息過期(x-message-ttl); TTL(Time To Life) ? ? 4)隊列中有消息數(shù)量超過了最大值(x-max-length); ? ? 5)隊列中的消息容量超過了隊列的最大空間(x-max-length-bytes);

死信隊列使用流程圖

消息的確認(rèn)默認(rèn)情況下是自動確認(rèn)的如果想改為手動可以在配置文件中添加

(manual)為手動處理信息

消息的確認(rèn)模式有:

? ? ? ? ①:AcknowledgeMode.NONE:自動確認(rèn)

? ? ? ? ②:AcknowledgeMode.AUTO:根據(jù)情況確認(rèn)

? ? ? ? ③:AcknowledgeMode.MANUAL:手動確認(rèn)

//手動確認(rèn)消息 Boolean 是否重新入隊

channel.basicAck(tag,true)

//手動拒絕消息 Boolean 是否重新入隊

channel.basicReject(tag,false);

?

柚子快報激活碼778899分享:消息隊列:RabbitMQ

http://yzkb.51969.com/

精彩內(nèi)容

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

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

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

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

發(fā)布評論

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

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

掃描二維碼手機(jī)訪問

文章目錄