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

消息隊列RabbitMQ.01.安裝部署與基本使用

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

目錄

?RabbitMQ的作用

Message queue 釋義

?問題思考

?存在的問題

優(yōu)化方案?

案例分析?

帶來的好處?

消息隊列特點(diǎn)

?Email郵件案例分析

Docker安裝部署RabbitMQ

1.下拉鏡像

2.運(yùn)行RabbitMQ

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

4.容器啟動后,可以通過 docker logs 容器 查看日志

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

?springboot連接配置

1.配置spring賬號

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

3.配置yml文件?

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

5.生成者測試類

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


消息隊列RabbitMQ.01.安裝部署與基本使用,網(wǎng)絡(luò),rabbitmq

?RabbitMQ的作用


Message queue 釋義

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

?問題思考

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

?存在的問題

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

優(yōu)化方案?

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

案例分析?

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

?Email郵件案例分析

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

Docker安裝部署RabbitMQ


1.下拉鏡像

docker pull rabbitmq:management
注意獲取鏡像的時候要獲取 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 的一個重要注意事項是它根據(jù)所謂的 節(jié)點(diǎn)名稱 存儲數(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.打開防火墻端口號并重新運(yùn)行防火墻

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

firewall-cmd --reload

4.容器啟動后,可以通過 docker logs 容器 查看日志

docker logs my-rabbitmq

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

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

消息隊列RabbitMQ.01.安裝部署與基本使用,網(wǎng)絡(luò),rabbitmq

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

消息隊列RabbitMQ.01.安裝部署與基本使用,網(wǎng)絡(luò),rabbitmq

?springboot連接配置


1.配置spring賬號

切記需要授權(quán)

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

消息隊列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.生成者測試類

public class TestController {

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

    @RequestMapping("/send1")
    public String send1(){
        //向消息隊列發(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);
        //向消息隊列發(fā)送消息
        template.convertAndSend("secondQueue",jack);
        return "??";
    }
}

因為消息隊列支持的對象傳參必須consumer 和 publisher 兩個項目的pojo包路徑完全一致所以使用:

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

記得拋出異常 throws Exception 不然會報錯文章來源地址http://www.zghlxwxcb.cn/news/detail-821473.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)于消息隊列RabbitMQ.01.安裝部署與基本使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • docker部署rabbitmq消息隊列

    docker部署rabbitmq消息隊列

    一、首先我們在dockerhub上搜索rabbitmq鏡像 (下載版本我們可以通過指定,也可以通過直接搜過rabbitmq獲取dockerhub上的最新版本,例如docker search rabbitmq) 二、搜索完成后,我們有了目標(biāo)鏡像版本,下一步就是通過dockerhub把鏡像下載到本地,方便我們直接使用鏡像時再去下載鏡像

    2023年04月18日
    瀏覽(17)
  • 【云原生 | 27】Docker部署運(yùn)行開源消息隊列實現(xiàn)RabbitMQ

    【云原生 | 27】Docker部署運(yùn)行開源消息隊列實現(xiàn)RabbitMQ

    作者簡介:??云計算領(lǐng)域優(yōu)質(zhì)創(chuàng)作者??新星計劃第三季python賽道第一名???阿里云ACE認(rèn)證高級工程師?? ??個人主頁:小鵬linux ??個人社區(qū):小鵬linux(個人社區(qū))歡迎您的加入! 目錄 1. 關(guān)于MQ 1.1?什么是MQ? 1.2 MQ是干什么用的?? 1.3 MQ衡量標(biāo)準(zhǔn)? 1.4 主流競品分析? 2. 關(guān)

    2024年01月20日
    瀏覽(18)
  • 消息隊列-------Rabbitmq介紹和安裝

    消息隊列就是基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)中的“先進(jìn)先出”的一種數(shù)據(jù)機(jī)構(gòu)。想一下,生活中買東西,需要排隊,先排的人先買消費(fèi),就是典型的“先進(jìn)先出” MQ是一直存在,不過隨著微服務(wù)架構(gòu)的流行,成了解決微服務(wù)之間問題的常用工具。 ?1.應(yīng)用解耦? 單體應(yīng)用---》分布式應(yīng)用 ?

    2024年02月10日
    瀏覽(20)
  • RabbitMQ實現(xiàn)延遲消息,RabbitMQ使用死信隊列實現(xiàn)延遲消息,RabbitMQ延時隊列插件

    RabbitMQ實現(xiàn)延遲消息,RabbitMQ使用死信隊列實現(xiàn)延遲消息,RabbitMQ延時隊列插件

    假設(shè)有一個業(yè)務(wù)場景:超過30分鐘未付款的訂單自動關(guān)閉,這個功能應(yīng)該怎么實現(xiàn)? RabbitMQ使用死信隊列,可以實現(xiàn)消息的延遲接收。 隊列有一個消息過期屬性。就像豐巢超過24小時就收費(fèi)一樣,通過設(shè)置這個屬性,超過了指定事件的消息將會被丟棄。 這個屬性交:x-message

    2024年02月13日
    瀏覽(104)
  • RabbitMQ入門 消息隊列快速入門 SpringAMQP WorkQueue 隊列和交換機(jī) Fanout Direct exchange RAbbitMQ單體部署

    RabbitMQ入門 消息隊列快速入門 SpringAMQP WorkQueue 隊列和交換機(jī) Fanout Direct exchange RAbbitMQ單體部署

    微服務(wù)間通訊有同步和異步兩種方式: 同步通訊:就像打電話,需要實時響應(yīng)。 異步通訊:就像發(fā)郵件,不需要馬上回復(fù)。 兩種方式各有優(yōu)劣,打電話可以立即得到響應(yīng),但是你卻不能跟多個人同時通話。發(fā)送郵件可以同時與多個人收發(fā)郵件,但是往往響應(yīng)會有延遲。 1.

    2024年04月08日
    瀏覽(19)
  • 消息隊列之RabbitMQ的安裝配置

    消息隊列之RabbitMQ的安裝配置

    RabbitMQ是由erlang語言開發(fā),基于AMQP(Advanced Message Queue 高級消息隊列協(xié)議)協(xié)議實現(xiàn)的消息隊列,它是一種應(yīng)用程序之間的通信方法,消息隊列在分布式系統(tǒng)開發(fā)中應(yīng)用非常廣泛。點(diǎn)擊跳轉(zhuǎn)RabbitMQ官方地址 簡單模式,work模式 ,Publish/Subscribe發(fā)布與訂閱模式,Routing路由模式,

    2024年04月25日
    瀏覽(24)
  • 基于RabbitMQ的模擬消息隊列之六——網(wǎng)絡(luò)通信設(shè)計

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

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

    2024年02月09日
    瀏覽(29)
  • 分布式搜索引擎(Elastic Search)+消息隊列(RabbitMQ)部署(商城4)

    分布式搜索引擎(Elastic Search)+消息隊列(RabbitMQ)部署(商城4)

    1、全文搜索 Elastic search可以用于實現(xiàn)全文搜索功能,例如商城中對商品搜索、搜索、分類搜索、訂單搜索、客戶搜索等。它支持復(fù)雜的查詢語句、中文分詞、近似搜索等功能,可以快速地搜索并返回匹配的結(jié)果。 2、日志分析 Elastic search可以用于實現(xiàn)實時日志分析,例

    2024年02月04日
    瀏覽(21)
  • RabbitMQ 消息隊列使用

    RabbitMQ 消息隊列使用

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

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

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

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

    2024年02月07日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包