最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springBoot整合rabbitmq測(cè)試常用模型小結(jié)

 更新時(shí)間:2022年01月08日 09:22:44   作者:穿條秋褲到處跑  
這篇文章主要介紹了springBoot整合rabbitmq并測(cè)試五種常用模型,本文主要針對(duì)前五種常用模型,在spirngboot框架的基礎(chǔ)上整合rabbitmq并進(jìn)行測(cè)試使用,需要的朋友可以參考下

之前我們記錄了原生java代碼使用rabbitmq的方法,很簡(jiǎn)單,類似于原生jdbc代碼一樣,將連接對(duì)象抽離出來作為工具類,生產(chǎn)者和消費(fèi)者通過工具類獲取連接對(duì)象,進(jìn)而獲取通道對(duì)象,再注冊(cè)交換機(jī)或者是隊(duì)列等,發(fā)送消息與接收消息。
在企業(yè)開發(fā)中,我們更多的是使用spring框架來整合其它技術(shù),springboot更是方便的提供了各種starter來快速添加依賴,完成整合,開箱即用。

1.添加依賴

<dependency>
	  <groupId>org.springframework.boot</groupId>
	  <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2.編寫配置

配置信息包括ip,端口,虛擬主機(jī),用戶名和密碼,和原生java代碼所需的配置信息一致。

spring:
  application:
    name: spirngboot-rabbitmq
  rabbitmq:
    host: 192.168.20.128
    port: 5672
    virtual-host: /vh
    username: wuwl
    password: 123456

3.編寫并測(cè)試

本文主要針對(duì)前五種常用模型,在spirngboot框架的基礎(chǔ)上整合rabbitmq并進(jìn)行測(cè)試使用。

在這里插入圖片描述

(1) Hello World模型

這是一種簡(jiǎn)單的直連模型,生產(chǎn)者將消息直接發(fā)送至消息隊(duì)列,消費(fèi)者綁定消息隊(duì)列后直接獲取,一對(duì)一。
spring-boot-starter-amqp為我們提供了一個(gè)org.springframework.amqp.rabbit.core.RabbitTemplate類來方便我們使用rabbitmq,自動(dòng)注入即可。

生產(chǎn)者測(cè)試類:

@SpringBootTest(classes = RabbitmqDemoApplication.class)
@RunWith(SpringRunner.class)
public class RabbitmqDemoApplicationTests {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public void testHelloQueues(){
            rabbitTemplate.convertAndSend("hello","hello world");
    }
}

生產(chǎn)者向名為hello的隊(duì)列發(fā)送消息,但是,在沒有消費(fèi)者的情況下,生產(chǎn)者沒有任何意義。另外,convertAndSend方法的第一個(gè)參數(shù)并不是消息隊(duì)列的意思,而是routingKey,我們根據(jù)源碼找到最初定義的接口可以看到以下內(nèi)容:

/**
	 * Convert a Java object to an Amqp {@link Message} and send it to a default exchange
	 * with a specific routing key.
	 *
	 * @param routingKey the routing key
	 * @param message a message to send
	 * @throws AmqpException if there is a problem
	 */
	void convertAndSend(String routingKey, Object message) throws AmqpException;

第二個(gè)參數(shù)為Object類型,也就是說可以傳遞任意類型的對(duì)象,該方法將對(duì)象轉(zhuǎn)換成一個(gè)Amqp消息并發(fā)送到一個(gè)默認(rèn)的交換機(jī),并且routingKey為第一個(gè)參數(shù)的內(nèi)容,沒有提到消息隊(duì)列的信息,但我們可以分析到,這里的routingKeyqueues應(yīng)該是同名的。

消費(fèi)者類:

@Component
@RabbitListener(queuesToDeclare = @Queue("hello"))
public class HelloQueuesConsumer {
    @RabbitHandler
    public void consume(String msg){
        System.out.println("消費(fèi)消息:" + msg + " " + System.currentTimeMillis());
    }
}

上面的代碼等同于:

@Component
public class HelloQueuesConsumer {
    @RabbitListener(queuesToDeclare = @Queue("hello"))
    public void consume(String msg){
        System.out.println("消費(fèi)消息:" + msg + " " + System.currentTimeMillis());
    }
}
@RabbitListener 可以標(biāo)注在類上面,需配合 @RabbitHandler 注解一起使用
@RabbitListener 標(biāo)注在類上面表示當(dāng)有收到消息的時(shí)候,就交給 @RabbitHandler 的方法處理,具體使用哪個(gè)方法處理,根據(jù) MessageConverter 轉(zhuǎn)換后的參數(shù)類型

直接啟動(dòng)測(cè)試方法,也就是生產(chǎn)者,可以看到:

在這里插入圖片描述

消費(fèi)者有接收到消息隊(duì)列中的信息并打印。

(2) work queues模型

生產(chǎn)者測(cè)試方法,類與第一個(gè)模型一致

@Test
public void testWorkQueues(){
    for (int i = 0; i < 20; i++) {
        rabbitTemplate.convertAndSend("work","work index " + i);
    }
}

消費(fèi)者類:

@Component
public class WorkQueuesConsumer {
    @RabbitListener(queuesToDeclare = @Queue("work"))
    public void consume1(String msg){
        System.out.println("consumer1消費(fèi)消息:" + msg);
    }
    @RabbitListener(queuesToDeclare = @Queue("work"))
    public void consume2(String msg){
        System.out.println("consumer2消費(fèi)消息:" + msg);
    }
}

啟動(dòng)生產(chǎn)者測(cè)試方法:

在這里插入圖片描述

消費(fèi)者一與消費(fèi)者二均勻分配了隊(duì)列中的消息任務(wù),即使兩者執(zhí)行效率不一致,也同樣是均勻分配。

(3) Publish/Subscribe模型

生產(chǎn)者測(cè)試方法:

for (int i = 0; i < 20; i++) {
    rabbitTemplate.convertAndSend("amq.fanout","","fanout msg " + i);
}

消費(fèi)者類:

@Component
public class FanoutQueuesConsumer {
    @RabbitListener(bindings = {
            @QueueBinding(value = @Queue,
                    exchange = @Exchange(
                            value = "amq.fanout",
                            type = "fanout"))})
    public void consume1(String msg) {
        System.out.println("consumer1消費(fèi)消息:" + msg);
    }
    @RabbitListener(bindings = {
            @QueueBinding(value = @Queue,
                    exchange = @Exchange(
                            value = "amq.fanout",
                            type = "fanout"))})
    public void consume2(String msg) {
        System.out.println("consumer2消費(fèi)消息:" + msg);
    }
}

注意此處的交換機(jī)信息

啟動(dòng)生產(chǎn)者測(cè)試方法:

在這里插入圖片描述

此處只粘貼了部分打印信息,兩個(gè)消費(fèi)者獲得了相同的消息,生產(chǎn)者將消息發(fā)送至交換機(jī),由交換機(jī)發(fā)送至已注冊(cè)到交換機(jī)的所有臨時(shí)消息隊(duì)列,進(jìn)而消費(fèi)者獲取隊(duì)列中的消息。

(4) Routing模型

生產(chǎn)者測(cè)試方法:

@Test
public void testDirectQueues(){
    rabbitTemplate.convertAndSend("amq.direct","info","routingKey is info");
    rabbitTemplate.convertAndSend("amq.direct","warn","routingKey is warn");
    rabbitTemplate.convertAndSend("amq.direct","error","routingKey is error");
}

routing也成為fanout模型,對(duì)應(yīng)的交換機(jī)類型為direct

消費(fèi)者類:

@Component
public class DirectQueuesConsumer {
    @RabbitListener(bindings = {
            @QueueBinding(value = @Queue,
                    exchange = @Exchange(
                            value = "amq.direct",
                            type = "direct"),
                    key = {"info", "warn", "error"})})
    public void consume1(String msg) {
        System.out.println("consumer1消費(fèi)消息:" + msg);
    }

    @RabbitListener(bindings = {
            @QueueBinding(value = @Queue,
                    exchange = @Exchange(
                            value = "amq.direct",
                            type = "direct"),
                    key = "error")})
    public void consume2(String msg) {
        System.out.println("consumer2消費(fèi)消息:" + msg);
    }
}

啟動(dòng)生產(chǎn)者測(cè)試類:
在這里插入圖片描述
消費(fèi)者一配置了三種類型的routingKey,所以三種類型的消息都能夠接收到,消費(fèi)者二只能接受到error類型的消息。

(5) Topic模型

生產(chǎn)者測(cè)試方法:

@Test
public void testTopicQueues(){
    rabbitTemplate.convertAndSend("amq.topic","file.info","routingKey is info");
    rabbitTemplate.convertAndSend("amq.topic","file.warn","routingKey is warn");
    rabbitTemplate.convertAndSend("amq.topic","file.error","routingKey is error");
}

消費(fèi)者類:

@Component
public class TopicQueuesConsumer {
    @RabbitListener(bindings = {
            @QueueBinding(value = @Queue,
                    exchange = @Exchange(
                            value = "amq.topic",
                            type = "topic"),
                    key = {"#"})})
    public void consume1(String msg) {
        System.out.println("consumer1消費(fèi)消息:" + msg);
    }

    @RabbitListener(bindings = {
            @QueueBinding(value = @Queue,
                    exchange = @Exchange(
                            value = "amq.topic",
                            type = "topic"),
                    key = "*.error")})
    public void consume2(String msg) {
        System.out.println("consumer2消費(fèi)消息:" + msg);
    }
}

啟動(dòng)生產(chǎn)者測(cè)試方法:

在這里插入圖片描述

消費(fèi)者一配置的routingKey#,可以接受任意類型的消息,*好代表一個(gè)單詞,消費(fèi)者二可以接受任意單詞加上.errorroutingKey的消息。

到此這篇關(guān)于springBoot整合rabbitmq并測(cè)試五種常用模型的文章就介紹到這了,更多相關(guān)springBoot整合rabbitmq內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多線程環(huán)境下死鎖模擬

    Java多線程環(huán)境下死鎖模擬

    這篇文章主要介紹了模擬Java多線程環(huán)境下的死鎖,文章介紹一些死鎖的產(chǎn)生條件的相關(guān)資料,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2021-12-12
  • Spring Boot 中使用cache緩存的方法

    Spring Boot 中使用cache緩存的方法

    Spring Cache是Spring針對(duì)Spring應(yīng)用,給出的一整套應(yīng)用緩存解決方案。下面小編給大家?guī)砹薙pring Boot 中使用cache緩存的方法,感興趣的朋友參考下吧
    2018-01-01
  • Java中BigInteger類的使用方法詳解(全網(wǎng)最新)

    Java中BigInteger類的使用方法詳解(全網(wǎng)最新)

    這篇文章主要介紹了Java中BigInteger類的使用方法詳解,常用最全系列,本章作為筆記使用,內(nèi)容比較全面,但常用的只有:構(gòu)造函數(shù),基本運(yùn)算以及compareTo(),intValue(),setBit(),testBit()方法,需要的朋友可以參考下
    2023-05-05
  • maven配置本地倉庫的方法步驟

    maven配置本地倉庫的方法步驟

    本文主要介紹了maven配置本地倉庫的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • java實(shí)現(xiàn)音樂播放器完整代碼(調(diào)整顯示音量大小、調(diào)整進(jìn)度、圖片切換)

    java實(shí)現(xiàn)音樂播放器完整代碼(調(diào)整顯示音量大小、調(diào)整進(jìn)度、圖片切換)

    這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)音樂播放器(調(diào)整顯示音量大小、調(diào)整進(jìn)度、圖片切換)的相關(guān)資料,這本身是老師布置的一個(gè)作業(yè),寫完感覺不錯(cuò)分享給大家,需要的朋友可以參考下
    2023-07-07
  • Java自定義簡(jiǎn)單標(biāo)簽實(shí)例

    Java自定義簡(jiǎn)單標(biāo)簽實(shí)例

    Java自定義簡(jiǎn)單標(biāo)簽可以方便的在頁面輸出信息,并且對(duì)于權(quán)限的控制,和對(duì)于Jsp標(biāo)簽和servlet代碼的分離有著很好的作用
    2013-07-07
  • Java Swing樹狀組件JTree用法實(shí)例詳解

    Java Swing樹狀組件JTree用法實(shí)例詳解

    這篇文章主要介紹了Java Swing樹狀組件JTree用法,結(jié)合具體實(shí)例形式分析了Swing組件JTree構(gòu)成樹狀列表的節(jié)點(diǎn)設(shè)置與事件響應(yīng),以及自定義圖形節(jié)點(diǎn)的相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • SpringBoot統(tǒng)一接口返回及全局異常處理高級(jí)用法

    SpringBoot統(tǒng)一接口返回及全局異常處理高級(jí)用法

    這篇文章主要為大家介紹了SpringBoot統(tǒng)一接口返回及全局異常處理高級(jí)用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 基于java中正則操作的方法總結(jié)

    基于java中正則操作的方法總結(jié)

    本篇文章介紹了,在java中正則操作的方法總結(jié)。需要的朋友參考下
    2013-05-05
  • idea快速實(shí)現(xiàn)將SpringBoot項(xiàng)目打包Docker鏡像并部署

    idea快速實(shí)現(xiàn)將SpringBoot項(xiàng)目打包Docker鏡像并部署

    本文主要介紹了idea快速實(shí)現(xiàn)將SpringBoot項(xiàng)目打包Docker鏡像并部署,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論

鹿泉市| 顺义区| 曲沃县| 古交市| 广南县| 大理市| 行唐县| 玛多县| 太保市| 马关县| 胶州市| 慈利县| 南漳县| 平潭县| 灵宝市| 泽州县| 岳西县| 夏邑县| 新民市| 江华| 镇坪县| 当雄县| 乌兰浩特市| 西吉县| 濮阳市| 南宫市| 黔南| 昌吉市| 廉江市| 平塘县| 象州县| 盈江县| 公主岭市| 和田县| 法库县| 固原市| 灵寿县| 阿克苏市| 积石山| 山西省| 和硕县|