国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

手機(jī)怎么做網(wǎng)站免費(fèi)的百度學(xué)術(shù)官網(wǎng)入口

手機(jī)怎么做網(wǎng)站免費(fèi)的,百度學(xué)術(shù)官網(wǎng)入口,設(shè)計(jì)專業(yè)招聘信息,免費(fèi)聊天網(wǎng)站模板和源碼MQ 同步通信 異步通信 事件驅(qū)動(dòng)優(yōu)勢(shì): 服務(wù)解耦 性能提升,吞吐量提高 服務(wù)沒有強(qiáng)依賴,不擔(dān)心級(jí)聯(lián)失敗問題 流量消峰 ? 小結(jié): 大多情況對(duì)時(shí)效性要求較高,所有大多數(shù)時(shí)間用同步。而如果不需要對(duì)方的結(jié)果,且吞吐…

MQ

同步通信

image-20240202103233412

image-20240202105021949

image-20240202105123170

異步通信

image-20240202111930461

事件驅(qū)動(dòng)優(yōu)勢(shì):

  • 服務(wù)解耦

  • 性能提升,吞吐量提高

    image-20240202141023030

  • 服務(wù)沒有強(qiáng)依賴,不擔(dān)心級(jí)聯(lián)失敗問題

    image-20240202141137606

  • 流量消峰

    image-20240202141435355

? 小結(jié): 大多情況對(duì)時(shí)效性要求較高,所有大多數(shù)時(shí)間用同步。而如果不需要對(duì)方的結(jié)果,且吞吐量,并發(fā)量較高則需要使用異步通信

image-20240202141921703

MQ常見框架

MQ(MessageQueue),消息隊(duì)列,字面來(lái)看就是存放消息的隊(duì)列,也就是事件驅(qū)動(dòng)架構(gòu)中的Broker

消息:就是事件,比如支付成功了這個(gè)事件,在MQ中就是一個(gè)消息

image-20240202144211395

RabbitMQ,RocketMQ 適合處理業(yè)務(wù)(若需要優(yōu)化定制則選Rocket,因?yàn)橛肑ava寫的)

Kafka 適合處理日志(海量數(shù)據(jù)且對(duì)數(shù)據(jù)安全性要求不高的場(chǎng)景),ActiveMQ用的較少

RabbitMQ

RabbitMQ概述與安裝

RabbitMQ是基于Erlang語(yǔ)言(面向并發(fā)的語(yǔ)言,天生為分布式系統(tǒng)而設(shè)計(jì)的)開發(fā)的開源消息通信中間件,官網(wǎng)地址:https://www.rabbitmq.com/

參考課前資料(鏈接:https://pan.baidu.com/s/1JuVKKFpUXg8TFxa_FoV3Gg
提取碼:1468) 來(lái)安裝RabbitMQ

image-20240202144811905

之后在瀏覽器輸入:http://192.168.83.130:15672/ 進(jìn)入RabbitMQ管理頁(yè)面,按docker run中設(shè)置的賬號(hào)密碼進(jìn)行登錄

結(jié)果如下

image-20240204101726227

mq整體架構(gòu)

image-20240204103735587

小結(jié)

image-20240204103835121

常見消息模型

image-20240204105108372

HelloWorld 案例

image-20240204105310538

動(dòng)手實(shí)踐

案例: 完成官方Demo中的hello world案例(鏈接:https://pan.baidu.com/s/1JuVKKFpUXg8TFxa_FoV3Gg
提取碼:1468)

image-20240204105416259

打開項(xiàng)目,將ip調(diào)成自己的rabbitmq使用虛擬機(jī)(或電腦)的ip,再運(yùn)行一次PublisherTest中的 testSendMessage() 方法

發(fā)送一條消息。再運(yùn)行ConsumerTest 中main方法來(lái)接收消息。

image-20240204112803673

小結(jié)

image-20240204135103572

SpringAMQP

AMOP(Advanced Message Queuing Protocol)高級(jí)消息隊(duì)列協(xié)議,大大簡(jiǎn)化消息發(fā)送和接收的代碼量,且與語(yǔ)言無(wú)關(guān)

SpringAmqp的官方地址:https://spring.io/projects/spring-amqp

image-20240204145954201

image-20240204140927498

AMQP依賴

<!--AMQP依賴,包含RabbitMQ-->
<dependency>    <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

在配置文件中添加mq連接信息

spring:rabbitmq:host: 192.168.83.130 # 主機(jī)名port: 5672 # 端口virtual-host: / # 虛擬主機(jī) username: itcast # 用戶名password: 123321 # 密碼

Basic Queue 簡(jiǎn)單隊(duì)列模型

案例:利用SpringAMQP實(shí)現(xiàn)HelloWorld中的基礎(chǔ)消息隊(duì)列功能

流程如下:

1.在父工程中引入spring-amqp的依賴,以及在publisher服務(wù)中編寫配置

2.在publisher服務(wù)中利用RabbitTemplate的convertAndSend方法,發(fā)送消息到simple.queue這個(gè)隊(duì)列

image-20240204145734357

SpringAMQP發(fā)送消息步驟:引入依賴和設(shè)置配置---->利用RabbitTemplate的convertAndSend方法

3.在consumer中編寫代碼,接收消息

image-20240204151638720

SpringAMQP接收消息步驟:引入依賴和設(shè)置配置—》定義類,添加Component注解,類中聲明方法添加@RabbitListener注解

Work Queue 工作隊(duì)列模型

Work queue,工作隊(duì)列,可以提高消息處理速度,避免隊(duì)列消息堆積

比如隊(duì)列 一秒來(lái)50條消息 一個(gè)消費(fèi)者一秒處理40條消息,那么需要兩個(gè)消費(fèi)者才能使得隊(duì)列中消息被處理不丟失

image-20240204153355750

案例:實(shí)現(xiàn)一個(gè)隊(duì)列綁定多個(gè)消費(fèi)者

image-20240204153947098

問題:rabbitMQ消息預(yù)取,會(huì)將50條消息平均分給消費(fèi)者1和消費(fèi)者2,但消費(fèi)者2處理速度慢,因此在1s內(nèi)處理不完publisher發(fā)過(guò)來(lái)的50條消息

解決方案:讓能者多勞,設(shè)置preFetch,控制預(yù)取消息的上限

image-20240204160513742

小結(jié)image-20240204161439493

發(fā)布、訂閱模型-Fanout

image-20240204161952605

注意:exchange負(fù)責(zé)消息路由,而不是存儲(chǔ)(queue負(fù)責(zé)存儲(chǔ)),路由失敗則消息丟失

Fanout Exchange 會(huì)將接收到的消息路由到每一個(gè)跟其綁定的queue(廣播)

案例:利用SpringAMQP演示FanoutExchange的使用

image-20240204163804072

step1 在consumer服務(wù)中聲明Exchange、Queue、Binding(綁定關(guān)系)

image-20240204163828992

image-20240204164305716

step2 在consumer服務(wù)聲明兩個(gè)消費(fèi)者

在consumer服務(wù)的SpringRabbitListener類中,添加兩個(gè)方法,分別監(jiān)聽fanout.queue1和fanout.queue2:

@RabbitListener(queues = "fanout.queue1")
public void listenFanoutQueue1(String msg) {System.out.println("消費(fèi)者1接收到Fanout消息:【" + msg + "】");
}@RabbitListener(queues = "fanout.queue2") 
public void listenFanoutQueue2(String msg) {System.out.println("消費(fèi)者2接收到Fanout消息:【" + msg + "】");
}

step3 在publisher服務(wù)發(fā)送消息到FanoutExchange

在publisher服務(wù)的SpringAmqpTest類中添加測(cè)試方法:

@Test
public void testFanoutExchange() {// 隊(duì)列名稱  String exchangeName = "itcast.fanout"; // 消息String message = "hello, everyone!";// 發(fā)送消息,參數(shù)分別是:交互機(jī)名稱、RoutingKey(暫時(shí)為空)、消息		rabbitTemplate.convertAndSend(exchangeName, "", message);
}

小結(jié)

image-20240205092228233

發(fā)布、訂閱模型-Direct

image-20240205092356181

案例:利用SpringAMQP演示DirectExchange的使用

image-20240205092544599

步驟一 在consumer服務(wù)聲明Exchange、Queue

1.在consumer服務(wù)中,編寫兩個(gè)消費(fèi)者方法,分別監(jiān)聽direct.queue1和direct.queue2,

2.并利用@RabbitListener聲明Exchange、Queue、RoutingKey

@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue1"),exchange = @Exchange(name = "itcast.direct", type = ExchangeTypes.DIRECT),key = {"red","blue"}
))
public void listenDirectQueue1(String msg){System.out.println("消費(fèi)者1........接收到路由消息:【" + msg + "】" + LocalTime.now());
}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue2"),exchange = @Exchange(name = "itcast.direct", type = ExchangeTypes.DIRECT),key = {"red","yellow"}
))
public void listenDirectQueue2(String msg){System.out.println("消費(fèi)者2........接收到消路由息:【" + msg + "】" + LocalTime.now());
}

步驟二 在publisher服務(wù)發(fā)送消息到DirectExchange

在publisher服務(wù)的SpringAmqpTest類中添加測(cè)試方法:

@Test
public void testDirectExchange() {//交換機(jī)名字String exchangeName = "itcast.direct";//消息String message = "紅色警報(bào)!日本亂排核廢水,導(dǎo)致海洋生物變異,驚現(xiàn)哥斯拉!";//發(fā)送消息,參數(shù)依次為:交換機(jī)名稱,RoutingKey,消息rabbitTemplate.convertAndSend(exchangeName, "blue", message);
}

從blue->yellow->red 運(yùn)行三次,得到結(jié)果如下

image-20240205104021565

小結(jié)

image-20240205104321850

發(fā)布、訂閱模型-Topic

image-20240205104559605

案例 利用SpringAMQP演示TopicExchange的使用

image-20240205104825731

步驟一:在consumer服務(wù)聲明Exchange、Queue

1.在consumer服務(wù)中,編寫兩個(gè)消費(fèi)者方法,分別監(jiān)聽topic.queue1和topic.queue2,

2.并利用@RabbitListener聲明Exchange、Queue、RoutingKey

@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "topic.queue1"),exchange = @Exchange(name = "itcast.topic", type = ExchangeTypes.TOPIC),key = "china.#"
))
public void listenTopicQueue1(String msg){System.out.println("消費(fèi)者1........接收到路由消息:【" + msg + "】" + LocalTime.now());
}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "topic.queue2"),exchange = @Exchange(name = "itcast.topic", type = ExchangeTypes.TOPIC),key = "#.news"
))
public void listenTopicQueue2(String msg){System.out.println("消費(fèi)者2........接收到消路由息:【" + msg + "】" + LocalTime.now());
}

步驟二:在publisher服務(wù)發(fā)送消息到TopicExchange

在publisher服務(wù)的SpringAmqpTest類中添加測(cè)試方法:

@Test
public void testTopicExchange() {//交換機(jī)名字String exchangeName = "itcast.topic";//消息String message = "喜報(bào)!孫悟空大戰(zhàn)哥斯拉,勝!";//發(fā)送消息,參數(shù)依次為:交換機(jī)名稱,RoutingKey,消息rabbitTemplate.convertAndSend(exchangeName, "china.news", message);
}

小結(jié)

image-20240205105655795

消息轉(zhuǎn)化器

Spring的對(duì)消息對(duì)象的處理是由org.springframework.amqp.support.converter.MessageConverter來(lái)處理的。而默認(rèn)實(shí)現(xiàn)是SimpleMessageConverter,基于JDK的ObjectOutputStream完成序列化。如果要修改只需要定義一個(gè)MessageConverter 類型的Bean即可。推薦用JSON方式序列化,步驟如下:

? 在publisher服務(wù)引入依賴

<dependency>   <groupId>com.fasterxml.jackson.core</groupId>   <artifactId>jackson-databind</artifactId>
</dependency>

? 在publisher服務(wù)聲明MessageConverter。(原本應(yīng)該放到配置類中,但啟動(dòng)類也是配置類,所以可以放啟動(dòng)類中)

@Bean
public MessageConverter jsonMessageConverter(){return new Jackson2JsonMessageConverter(); 
}

image-20240205111950238

案例 測(cè)試發(fā)送Object類型消息

image-20240205111336946

結(jié)果如下(沒有更改JDK序列化方式)

image-20240205111231469

使用json序列化器之后

image-20240205111303797

consumer接收消息過(guò)程

step1:加jackson依賴,依賴上面已經(jīng)放父工程中,就不用做了

step2: 將pulisher中相同的MessageConverter放入consumer 啟動(dòng)類中(發(fā)送方與接收方必須相同)

@Bean
public MessageConverter jsonMessageConverter(){return new Jackson2JsonMessageConverter(); 
}

step3: 定義一個(gè)消費(fèi)者,監(jiān)聽object.queue隊(duì)列并消費(fèi)消息

 @RabbitListener(queues = "object.queue")
public void listenObjectQueue(Map<String,Object> msg){System.out.println("消費(fèi)者........接收到對(duì)象消息:【" + msg + "】" + LocalTime.now());
}

image-20240205135854654

http://aloenet.com.cn/news/46673.html

相關(guān)文章:

  • 電腦維修 做網(wǎng)站小廣告圖片
  • 網(wǎng)站建設(shè)系統(tǒng) 招標(biāo)西安百度seo推廣電話
  • 濟(jì)寧做網(wǎng)站有哪幾家職業(yè)培訓(xùn)機(jī)構(gòu)需要什么資質(zhì)
  • 招商平臺(tái)公司山西seo排名
  • 做棋牌推廣網(wǎng)站違法不網(wǎng)絡(luò)推廣站
  • 天津網(wǎng)站建設(shè)定制公司免費(fèi)seo網(wǎng)站推廣在線觀看
  • 什么視頻網(wǎng)站可以做鏈接深圳網(wǎng)站開發(fā)公司
  • 商河做網(wǎng)站多少錢my77728域名查詢
  • 做網(wǎng)站要學(xué)多久電商運(yùn)營(yíng)
  • 為男人做購(gòu)物網(wǎng)站攜程: 2023年旅行搜索上漲超900%
  • 網(wǎng)站建設(shè)招標(biāo)公告首頁(yè)排名關(guān)鍵詞優(yōu)化
  • 鄭州網(wǎng)站建設(shè)方案書網(wǎng)絡(luò)的推廣
  • 微網(wǎng)站制作公司佛山疫情最新消息
  • 濰坊做企業(yè)手機(jī)版網(wǎng)站濰坊在線制作網(wǎng)站
  • 網(wǎng)站設(shè)計(jì)美工多少網(wǎng)絡(luò)推廣電話
  • 中化建工北京建設(shè)投資有限公司網(wǎng)站最新的疫情信息
  • 企業(yè)網(wǎng)站類型市場(chǎng)營(yíng)銷互聯(lián)網(wǎng)營(yíng)銷
  • 展示網(wǎng)站報(bào)價(jià)搜索引擎環(huán)境優(yōu)化
  • 什么網(wǎng)站可以做引文分析開發(fā)一個(gè)網(wǎng)站需要哪些技術(shù)
  • 酒泉網(wǎng)站建設(shè)平臺(tái)百度網(wǎng)盤pc網(wǎng)頁(yè)版入口
  • 哈爾濱網(wǎng)站建設(shè)與管理今日國(guó)際新聞?lì)^條15條
  • 濱海住房和城鄉(xiāng)建設(shè)局網(wǎng)站谷歌查詢關(guān)鍵詞的工具叫什么
  • 做網(wǎng)站的圖片需要多少錢下載百度極速版免費(fèi)安裝
  • 云南省建設(shè)廳招標(biāo)辦網(wǎng)站網(wǎng)絡(luò)營(yíng)銷活動(dòng)策劃
  • olam wordpress搜索引擎優(yōu)化搜索優(yōu)化
  • 常德市做網(wǎng)站聯(lián)系電話cps廣告聯(lián)盟
  • wordpress注冊(cè)增加性別選項(xiàng)seo上首頁(yè)
  • 在工商局網(wǎng)站做年報(bào)要交費(fèi)嗎百度網(wǎng)盤登錄入口 網(wǎng)頁(yè)
  • 進(jìn)入百度首頁(yè)seo優(yōu)化技術(shù)廠家
  • 無(wú)人區(qū)免費(fèi)電影入口seo研究中心南寧線下