91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springBoot整合rabbitmq測試常用模型有哪些

發布時間:2022-01-11 14:11:12 來源:億速云 閱讀:338 作者:柒染 欄目:開發技術

這篇文章跟大家分析一下“springBoot整合rabbitmq測試常用模型有哪些”。內容詳細易懂,對“springBoot整合rabbitmq測試常用模型有哪些”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠對大家有所幫助。下面跟著小編一起深入學習“springBoot整合rabbitmq測試常用模型有哪些”的知識吧。

在企業開發中,我們更多的是使用spring框架來整合其它技術,springboot更是方便的提供了各種starter來快速添加依賴,完成整合,開箱即用。

1.添加依賴

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

2.編寫配置

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

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

3.編寫并測試

下面主要針對前五種常用模型,在spirngboot框架的基礎上整合rabbitmq并進行測試使用。

springBoot整合rabbitmq測試常用模型有哪些

(1) Hello World模型

這是一種簡單的直連模型,生產者將消息直接發送至消息隊列,消費者綁定消息隊列后直接獲取,一對一。
spring-boot-starter-amqp為我們提供了一個org.springframework.amqp.rabbit.core.RabbitTemplate類來方便我們使用rabbitmq,自動注入即可。

生產者測試類:

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

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

/**
	 * 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;

第二個參數為Object類型,也就是說可以傳遞任意類型的對象,該方法將對象轉換成一個Amqp消息并發送到一個默認的交換機,并且routingKey為第一個參數的內容,沒有提到消息隊列的信息,但我們可以分析到,這里的routingKeyqueues應該是同名的。

消費者類:

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

上面的代碼等同于:

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

直接啟動測試方法,也就是生產者,可以看到:

springBoot整合rabbitmq測試常用模型有哪些

消費者有接收到消息隊列中的信息并打印。

(2) work queues模型

生產者測試方法,類與第一個模型一致

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

消費者類:

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

啟動生產者測試方法:

springBoot整合rabbitmq測試常用模型有哪些

消費者一與消費者二均勻分配了隊列中的消息任務,即使兩者執行效率不一致,也同樣是均勻分配。

(3) Publish/Subscribe模型

生產者測試方法:

for (int i = 0; i < 20; i++) {
    rabbitTemplate.convertAndSend("amq.fanout","","fanout msg " + 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消費消息:" + msg);
    }
    @RabbitListener(bindings = {
            @QueueBinding(value = @Queue,
                    exchange = @Exchange(
                            value = "amq.fanout",
                            type = "fanout"))})
    public void consume2(String msg) {
        System.out.println("consumer2消費消息:" + msg);
    }
}

注意此處的交換機信息

啟動生產者測試方法:

springBoot整合rabbitmq測試常用模型有哪些

此處只粘貼了部分打印信息,兩個消費者獲得了相同的消息,生產者將消息發送至交換機,由交換機發送至已注冊到交換機的所有臨時消息隊列,進而消費者獲取隊列中的消息。

(4) Routing模型

生產者測試方法:

@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模型,對應的交換機類型為direct

消費者類:

@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消費消息:" + msg);
    }

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

啟動生產者測試類:
springBoot整合rabbitmq測試常用模型有哪些消費者一配置了三種類型的routingKey,所以三種類型的消息都能夠接收到,消費者二只能接受到error類型的消息。

(5) Topic模型

生產者測試方法:

@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");
}

消費者類:

@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消費消息:" + msg);
    }

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

啟動生產者測試方法:

springBoot整合rabbitmq測試常用模型有哪些

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

關于springBoot整合rabbitmq測試常用模型有哪些就分享到這里啦,希望上述內容能夠讓大家有所提升。如果想要學習更多知識,請大家多多留意小編的更新。謝謝大家關注一下億速云網站!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东安县| 丽水市| 宜城市| 凤庆县| 堆龙德庆县| 阜平县| 个旧市| 横峰县| 巨鹿县| 黎平县| 双城市| 祥云县| 杭州市| 垫江县| 芮城县| 竹山县| 宁夏| 招远市| 清苑县| 衡南县| 元朗区| 固阳县| 阳信县| 郎溪县| 登封市| 汉川市| 潢川县| 佛坪县| 仪陇县| 来凤县| 台前县| 和顺县| 左权县| 安西县| 舞阳县| 绥中县| 永济市| 水城县| 邳州市| 镇远县| 缙云县|