国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

消息隊(duì)列RabbitMQ.01.基本使用

這篇具有很好參考價(jià)值的文章主要介紹了消息隊(duì)列RabbitMQ.01.基本使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

?RabbitMQ的作用

Message queue 釋義

?問題思考

?存在的問題

優(yōu)化方案?

案例分析?

帶來的好處?

消息隊(duì)列特點(diǎn)

?Email郵件案例分析

Docker安裝部署RabbitMQ

1.下拉鏡像

2.運(yùn)行RabbitMQ

?3.打開防火墻端口號(hào)并重新運(yùn)行防火墻

4.容器啟動(dòng)后,可以通過 docker logs 容器 查看日志

6.通過剛才填寫的用戶名和密碼登錄 admin?

?springboot連接配置

1.配置spring賬號(hào)

2.創(chuàng)建兩個(gè)springboot項(xiàng)目publisher consumer 選擇依賴?

3.配置yml文件?

4.生產(chǎn)者配置類

5.生成者測(cè)試類

6.消費(fèi)者接受信息


消息隊(duì)列RabbitMQ.01.基本使用,網(wǎng)絡(luò),rabbitmq

?RabbitMQ的作用


Message queue 釋義

服務(wù)之間最常見的通信方式是直接調(diào)用彼此來通信 , 消息從一端發(fā)出后立即就可以達(dá)到另一端 , 稱為即時(shí)消息通訊 ( 同步通信 )
消息從某一端發(fā)出后 , 首先進(jìn)入一個(gè)容器進(jìn)行臨時(shí)存儲(chǔ) , 當(dāng)達(dá)到某種條件后 , 再由這個(gè)容器發(fā)送給另一端 , 稱為延遲消息通訊 ( 異步通信 )

?問題思考

假設(shè)我們?cè)谔詫毾铝艘还P訂單后 , 淘寶后臺(tái)需要做這些事情:
  1. ?消息通知系統(tǒng):通知商家,你有一筆新的訂單,請(qǐng)及時(shí)發(fā)貨
  2. ?推薦系統(tǒng):更新用戶畫像,重新給用戶推薦他可能感興趣的商品
  3. ?會(huì)員系統(tǒng):更新用戶的積分和等級(jí)信息
createOrder(...) {
// 完成訂單服務(wù)
doCreateOrder(...);
// 調(diào)用其他服務(wù)接口
sendMsg(...);
updateUserInterestedGoods(...);
updateMemberCreditInfo(...);
}

?存在的問題

  • 過度耦合:如果后面創(chuàng)建訂單時(shí),需要觸發(fā)新的動(dòng)作,那就得去改代碼,在原有的創(chuàng)建訂單函數(shù)末尾,再追加一行代碼
  • 缺少緩沖:如果創(chuàng)建訂單時(shí),會(huì)員系統(tǒng)恰好處于非常忙碌或者宕機(jī)的狀態(tài),那這時(shí)更新會(huì)員信息就會(huì)失敗,我們需要一個(gè)地方,來暫時(shí)存放無法被消費(fèi)的消息

優(yōu)化方案?

我們需要一個(gè)消息中間件 , 來實(shí)現(xiàn)解耦和緩沖的功能 .
消息隊(duì)列RabbitMQ.01.基本使用,網(wǎng)絡(luò),rabbitmq
Server(Broker): 接收客戶端連接 , 實(shí)現(xiàn) AMQP 協(xié)議的消息隊(duì)列和路由功能的進(jìn)程 .
Virtual Host :虛擬主機(jī)的概念 , 類似權(quán)限控制組 , 一個(gè) Virtual Host 里可以有多個(gè) Exchange Queue.
Exchange: 交換機(jī) , 接收生產(chǎn)者發(fā)送的消息 , 并根據(jù) Routing Key 將消息路由到服務(wù)器中的隊(duì)列 Queue.
ExchangeType: 交換機(jī)類型決定了路由消息行為 ,RabbitMQ 中有三種類型 Exchange, 分別是 fanout direct 、 topic.
Message Queue :消息隊(duì)列 , 用于存儲(chǔ)還未被消費(fèi)者消費(fèi)的消息 .
Message :由 Header body 組成 ,Header 是由生產(chǎn)者添加的各種屬性的集合 , 包括 Message 是否被持久化、優(yōu)先級(jí)是多少、由哪個(gè) Message Queue 接收等 .body 是真正需要發(fā)送的數(shù)據(jù)內(nèi)
.
BindingKey :綁定關(guān)鍵字 , 將一個(gè)特定的 Exchange 和一個(gè)特定的 Queue 綁定起來 .

案例分析?

小紅希望小明多讀書 , 常尋找好書給小明看 , 之前的方式是這樣:小紅問小明什么時(shí)候有空 , 把書給小明送去 , 并親眼監(jiān)督小明讀完書才走 . 久而久之 , 兩人都覺得麻煩 .
后來的方式改成了:小紅對(duì)小明說「我放到書架上的書你都要看」 , 然后小紅每次發(fā)現(xiàn)不錯(cuò)的書都放到書架上 , 小明則看到書架上有書就拿下來看 .
書架就是一個(gè)消息隊(duì)列 , 小紅是生產(chǎn)者 , 小明是消費(fèi)者
帶來的好處?
1. 小紅想給小明書的時(shí)候 , 不必問小明什么時(shí)候有空 , 親手把書交給他了 , 小紅只把書放到書架上就行了 . 這樣小紅小明的時(shí)間都更自由 .
2. 小紅相信小明的讀書自覺和讀書能力 , 不必親眼觀察小明的讀書過程 , 小紅只要做一個(gè)放書的動(dòng)作 , 很節(jié)省時(shí)間 .
3. 當(dāng)明天有另一個(gè)愛讀書的小伙伴小強(qiáng)加入 , 小紅仍舊只需要把書放到書架上 , 小明和小強(qiáng)從書架上取書即可
4. 書架上的書放在那里 , 小明閱讀速度快就早點(diǎn)看完 , 閱讀速度慢就晚點(diǎn)看完 , 沒關(guān)系 , 比起小紅把書遞給小明并監(jiān)督小明讀完的方式 , 小明的壓力會(huì)小一些 .
消息隊(duì)列特點(diǎn)
1. 解耦 : 每個(gè)成員不必受其他成員影響 , 可以更獨(dú)立自主 , 只通過一個(gè)簡(jiǎn)單的容器來聯(lián)系 .
2. 提速 : 小紅選只要做一個(gè)放書的動(dòng)作 , 為自己節(jié)省了大量時(shí)間 .
3. 廣播 : 小紅只需要?jiǎng)趧?dòng)一次 , 就可以讓多個(gè)小伙伴有書可讀 , 這大大地節(jié)省了她的時(shí)間 , 也讓新的小伙伴的加入成本很低 .
4. 錯(cuò)峰與流控 : 小紅給書的頻率不穩(wěn)定 , 如果今明兩天連給了五本 , 之后隔三個(gè)月才又給一本 , 那小明只要在三個(gè)月內(nèi)從書架上陸續(xù)取走五本書讀完就行了 , 壓力就不那么大了 .

?Email郵件案例分析

有大量用戶注冊(cè)你的軟件 , 再高并發(fā)情況下注冊(cè)請(qǐng)求開始出現(xiàn)一些問題 .
例如郵件接口承受不住 , 或是分析信息時(shí)的大量計(jì)算使 cpu 滿載 , 這將會(huì)出現(xiàn)雖然用戶數(shù)據(jù)記錄很快的添加到數(shù)據(jù)庫(kù)中了 , 但是卻卡在發(fā)郵件或分析信息時(shí)的情況 .
導(dǎo)致請(qǐng)求的響應(yīng)時(shí)間大幅增長(zhǎng) , 甚至出現(xiàn)超時(shí) , 這就有點(diǎn)不劃算了 . 面對(duì)這種情況一般也是將這些操作放入消息隊(duì)列 ( 生產(chǎn)者消費(fèi)者模型 ), 消息隊(duì)列慢慢的進(jìn)行處理 , 同時(shí)可以很快的完成注冊(cè)請(qǐng)
, 不會(huì)影響用戶使用其他功能

Docker安裝部署RabbitMQ


1.下拉鏡像

docker pull rabbitmq:management
注意獲取鏡像的時(shí)候要獲取 management 版本的 , 不要獲取 last 版本的 ,management 版本的才帶有管理界面

2.運(yùn)行RabbitMQ

docker run -itd \
--name my-rabbitmq \
-p 5672:5672 -p 15672:15672 \
--hostname my-rabbitmq-host \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
--restart=always \
rabbitmq:management
--hostname :主機(jī)名 (RabbitMQ 的一個(gè)重要注意事項(xiàng)是它根據(jù)所謂的 節(jié)點(diǎn)名稱 存儲(chǔ)數(shù)據(jù) , 默認(rèn)為主機(jī)名 )
-e :指定環(huán)境變量 :
RABBITMQ_DEFAULT_VHOST :默認(rèn)虛擬機(jī)名
RABBITMQ_DEFAULT_USER :默認(rèn)的用戶名
RABBITMQ_DEFAULT_PASS :默認(rèn)用戶名的密碼

?3.打開防火墻端口號(hào)并重新運(yùn)行防火墻

firewall-cmd --zone=public --add-port=15672/tcp --permanent

firewall-cmd --reload

4.容器啟動(dòng)后,可以通過 docker logs 容器 查看日志

docker logs my-rabbitmq

5.通過主機(jī)網(wǎng)址進(jìn)入管理后臺(tái)

虛擬機(jī)ip地址/15672

消息隊(duì)列RabbitMQ.01.基本使用,網(wǎng)絡(luò),rabbitmq

6.通過剛才填寫的用戶名和密碼登錄 admin?

消息隊(duì)列RabbitMQ.01.基本使用,網(wǎng)絡(luò),rabbitmq

?springboot連接配置


1.配置spring賬號(hào)

切記需要授權(quán)

2.創(chuàng)建兩個(gè)springboot項(xiàng)目publisher consumer 選擇依賴?

消息隊(duì)列RabbitMQ.01.基本使用,網(wǎng)絡(luò),rabbitmq

3.配置yml文件?

#publisher
server:
    port: 8888
spring:
    rabbitmq:
        host: 192.168.241.130
        username: spring
        password: 123456
        port: 5672
        virtual-host: my_vhost

#consumer
server:
    port: 9999
spring:
    rabbitmq:
        host: 192.168.241.130
        username: spring
        password: 123456
        port: 5672
        virtual-host: my_vhost

4.生產(chǎn)者配置類

@Configuration
@SuppressWarnings("all")
public class RabbitConfig {
    @Bean
    public Queue firstQueue() {
        return new Queue("firstQueue");
    }

    @Bean
    public Queue secondQueue() {
        return new Queue("secondQueue");
    }
}

5.生成者測(cè)試類

public class TestController {

    @Autowired
    private AmqpTemplate template;
    @Autowired
    private ObjectMapper objectMapper;

    @RequestMapping("/send1")
    public String send1(){
        //向消息隊(duì)列發(fā)送消息
        template.convertAndSend("firstQueue","hello world");
        return "??";
    }

    @RequestMapping("/send2")
    public String send2() throws Exception{
        User jack = new User("jack", "123");
        String json = objectMapper.writeValueAsString(jack);
        //向消息隊(duì)列發(fā)送消息
        template.convertAndSend("secondQueue",jack);
        return "??";
    }
}

因?yàn)橄㈥?duì)列支持的對(duì)象傳參必須consumer 和 publisher 兩個(gè)項(xiàng)目的pojo包路徑完全一致所以使用:

@Autowired
private ObjectMapper objectMapper;
User jack = new User("jack", "123");

記得拋出異常 throws Exception 不然會(huì)報(bào)錯(cuò)文章來源地址http://www.zghlxwxcb.cn/news/detail-810978.html

6.消費(fèi)者接受信息

@Component
@SuppressWarnings("all")
@Slf4j
@RabbitListener(queues = "firstQueue")
public class Receiver {

    @RabbitHandler
    public void process(String msg) {
        log.warn("接收到:" + msg);
    }
}
@Component
@SuppressWarnings("all")
@Slf4j
@RabbitListener(queues = "secondQueue")
public class PojoReceiver {

    @Autowired
    private ObjectMapper objectMapper;

    @RabbitHandler
    public void process(String json) throws Exception{
        User user=objectMapper.readValue(json,User.class);
        log.warn("接收到:" + json);
    }
}

到了這里,關(guān)于消息隊(duì)列RabbitMQ.01.基本使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【RabbitMQ】RabbitMQ 消息的堆積問題 —— 使用惰性隊(duì)列解決消息的堆積問題

    【RabbitMQ】RabbitMQ 消息的堆積問題 —— 使用惰性隊(duì)列解決消息的堆積問題

    消息的堆積問題是指在消息隊(duì)列系統(tǒng)中,當(dāng)生產(chǎn)者以較快的速度發(fā)送消息,而消費(fèi)者處理消息的速度較慢,導(dǎo)致消息在隊(duì)列中積累并達(dá)到隊(duì)列的存儲(chǔ)上限。在這種情況下,最早被發(fā)送的消息可能會(huì)在隊(duì)列中滯留較長(zhǎng)時(shí)間,直到超過隊(duì)列的容量上限。當(dāng)隊(duì)列已滿且沒有更多的可

    2024年02月05日
    瀏覽(19)
  • 基于RabbitMQ的模擬消息隊(duì)列之六——網(wǎng)絡(luò)通信設(shè)計(jì)

    基于RabbitMQ的模擬消息隊(duì)列之六——網(wǎng)絡(luò)通信設(shè)計(jì)

    自定義基于TCP的應(yīng)用層通信協(xié)議。實(shí)現(xiàn)客戶端對(duì)服務(wù)器的遠(yuǎn)程調(diào)用 編寫服務(wù)器及客戶端代碼 1.請(qǐng)求格式 type:哪個(gè)方法 length:payload的長(zhǎng)度 payload:調(diào)用的方法的參數(shù) 2.創(chuàng)建Request類 1.響應(yīng)格式 type:哪個(gè)方法 length:payload的長(zhǎng)度 payload:調(diào)用的方法的結(jié)果 2.創(chuàng)建Response類 0X1 創(chuàng)建chann

    2024年02月09日
    瀏覽(30)
  • RabbitMQ 消息隊(duì)列使用

    RabbitMQ 消息隊(duì)列使用

    同步調(diào)用優(yōu)點(diǎn): 時(shí)效性強(qiáng),立即得到結(jié)果 缺點(diǎn): 耦合度高 新業(yè)務(wù)新需求到來時(shí),需要修改代碼 性能和吞吐能力下降 調(diào)用服務(wù)的響應(yīng)時(shí)間為所有服務(wù)的時(shí)間之和 資源浪費(fèi) 調(diào)用鏈中的服務(wù)在等待時(shí)不會(huì)釋放請(qǐng)求占用的資源 級(jí)聯(lián)失敗 一個(gè)服務(wù)執(zhí)行失敗會(huì)導(dǎo)致調(diào)用鏈后續(xù)所有服務(wù)失

    2024年01月21日
    瀏覽(15)
  • RabbitMQ-網(wǎng)頁使用消息隊(duì)列

    RabbitMQ-網(wǎng)頁使用消息隊(duì)列

    幾種模式 從最簡(jiǎn)單的開始 添加完新的虛擬機(jī)可以看到,當(dāng)前admin用戶的主機(jī)訪問權(quán)限中新增的剛添加的環(huán)境 1.1查看交換機(jī) 交換機(jī)列表中自動(dòng)新增了剛創(chuàng)建好的虛擬主機(jī)相關(guān)的預(yù)設(shè)交換機(jī)。一共7個(gè)。前面兩個(gè) direct類型的交換機(jī),一個(gè)是(AMQP default)還有一個(gè)是amq.direct,它們

    2024年02月07日
    瀏覽(23)
  • Golang使用消息隊(duì)列(RabbitMQ)

    Golang使用消息隊(duì)列(RabbitMQ)

    最近在使用Golang做了一個(gè)網(wǎng)盤項(xiàng)目(類似百度網(wǎng)盤),這個(gè)網(wǎng)盤項(xiàng)目有一個(gè)功能描述如下:用戶會(huì)刪除一個(gè)文件到垃圾回收站,回收站的文件有一個(gè)時(shí)間期限,比如24h,24h后數(shù)據(jù)庫(kù)中記錄和oss中文件會(huì)被刪除,在之前的版本中,可以使用定時(shí)任務(wù)來檢查數(shù)據(jù)庫(kù)記錄中刪除時(shí)間

    2024年02月10日
    瀏覽(24)
  • Hyperf使用RabbitMQ消息隊(duì)列

    Hyperf使用RabbitMQ消息隊(duì)列

    Hyperf連接使用RabbitMQ消息中間件 使用Docker部署RabbitMQ,-傳送門 使用Docker部署Hyperf,-傳送門- 安裝amqp擴(kuò)展 安裝command命令行擴(kuò)展 配置參數(shù) 假設(shè)已經(jīng)在rabbitmq設(shè)置了交換機(jī)exchange_test和隊(duì)列queue_test 新建 /config/autoload/amp.php配置文件,修改地址和用戶名密碼 創(chuàng)建生產(chǎn)者中間件 exch

    2024年02月13日
    瀏覽(20)
  • Java RabbitMQ消息隊(duì)列簡(jiǎn)單使用

    Java RabbitMQ消息隊(duì)列簡(jiǎn)單使用

    消息隊(duì)列,即MQ,Message Queue。 消息隊(duì)列是典型的:生產(chǎn)者、消費(fèi)者模型。生產(chǎn)者不斷向消息隊(duì)列中生產(chǎn)消息,消費(fèi)者不斷的從隊(duì)列中獲取消息。因?yàn)橄⒌纳a(chǎn)和消費(fèi)都是異步的,而且只關(guān)心消息的發(fā)送和接收,沒有業(yè)務(wù)邏輯的侵入,這樣就實(shí)現(xiàn)了生產(chǎn)者和消費(fèi)者的解耦。

    2024年02月12日
    瀏覽(34)
  • SSM 如何使用 RabbitMQ 實(shí)現(xiàn)消息隊(duì)列

    SSM 如何使用 RabbitMQ 實(shí)現(xiàn)消息隊(duì)列

    在分布式系統(tǒng)中,消息隊(duì)列是一種常見的通信方式,可以實(shí)現(xiàn)不同服務(wù)之間的異步通信和解耦。RabbitMQ 是一個(gè)開源的消息隊(duì)列軟件,本文將介紹如何在 SSM 框架中使用 RabbitMQ 實(shí)現(xiàn)消息隊(duì)列。 本文將使用 Spring Boot 作為 SSM 框架,使用 Maven 進(jìn)行項(xiàng)目管理。 在開始之前,需要安裝

    2024年02月06日
    瀏覽(21)
  • Thinkphp6使用RabbitMQ消息隊(duì)列

    Thinkphp6使用RabbitMQ消息隊(duì)列

    Thinkphp6連接使用RabbitMQ(不止tp6,其他框架對(duì)應(yīng)改下也一樣),使用Docker部署RabbitMQ,在上一篇已經(jīng)講了-傳送門-。 開始前先進(jìn)入RabbitMQ的web管理界面,選擇Queues菜單,點(diǎn)擊底部的Add a new queue,新建一個(gè)test的隊(duì)列。 安裝thinkphp6框架 安裝workerman擴(kuò)展 安裝rabbitmq擴(kuò)展 生產(chǎn)者 在a

    2023年04月23日
    瀏覽(57)
  • TP5簡(jiǎn)單使用RabbitMQ實(shí)現(xiàn)消息隊(duì)列

    在使用 RabbitMQ 之前,你要安裝好 RabbitMQ 服務(wù),具體安裝方法可以參考 windows下安裝RabbitMQ 1、安裝擴(kuò)展 進(jìn)入TP5 更目錄下,輸入命令安裝: composer require php-amqplib/php-amqplib 2、自定義命令 TP5 的自定義命令,這里也簡(jiǎn)單說下。 第一步: 創(chuàng)建命令類文件,新建 application/api/command

    2024年02月07日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包