中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

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

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

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

MQ

同步通信

image-20240202103233412

image-20240202105021949

image-20240202105123170

異步通信

image-20240202111930461

事件驅(qū)動優(yōu)勢:

  • 服務(wù)解耦

  • 性能提升,吞吐量提高

    image-20240202141023030

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

    image-20240202141137606

  • 流量消峰

    image-20240202141435355

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

image-20240202141921703

MQ常見框架

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

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

image-20240202144211395

RabbitMQ,RocketMQ 適合處理業(yè)務(wù)(若需要優(yōu)化定制則選Rocket,因為用Java寫的)

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

RabbitMQ

RabbitMQ概述與安裝

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

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

image-20240202144811905

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

結(jié)果如下

image-20240204101726227

mq整體架構(gòu)

image-20240204103735587

小結(jié)

image-20240204103835121

常見消息模型

image-20240204105108372

HelloWorld 案例

image-20240204105310538

動手實踐

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

image-20240204105416259

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

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

image-20240204112803673

小結(jié)

image-20240204135103572

SpringAMQP

AMOP(Advanced Message Queuing Protocol)高級消息隊列協(xié)議,大大簡化消息發(fā)送和接收的代碼量,且與語言無關(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 簡單隊列模型

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

流程如下:

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

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

image-20240204145734357

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

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

image-20240204151638720

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

Work Queue 工作隊列模型

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

比如隊列 一秒來50條消息 一個消費者一秒處理40條消息,那么需要兩個消費者才能使得隊列中消息被處理不丟失

image-20240204153355750

案例:實現(xiàn)一個隊列綁定多個消費者

image-20240204153947098

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

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

image-20240204160513742

小結(jié)image-20240204161439493

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

image-20240204161952605

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

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

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

image-20240204163804072

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

image-20240204163828992

image-20240204164305716

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

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

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

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

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

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

小結(jié)

image-20240205092228233

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

image-20240205092356181

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

image-20240205092544599

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

1.在consumer服務(wù)中,編寫兩個消費者方法,分別監(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("消費者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("消費者2........接收到消路由息:【" + msg + "】" + LocalTime.now());
}

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

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

@Test
public void testDirectExchange() {//交換機(jī)名字String exchangeName = "itcast.direct";//消息String message = "紅色警報!日本亂排核廢水,導(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ù)中,編寫兩個消費者方法,分別監(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("消費者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("消費者2........接收到消路由息:【" + msg + "】" + LocalTime.now());
}

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

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

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

小結(jié)

image-20240205105655795

消息轉(zhuǎn)化器

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

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

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

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

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

image-20240205111950238

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

image-20240205111336946

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

image-20240205111231469

使用json序列化器之后

image-20240205111303797

consumer接收消息過程

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

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

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

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

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

image-20240205135854654

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