SpringBoot專案整合RabbitMQ

java_codeMan發表於2020-12-18

前言:

本篇部落格主要說明SpringBoot專案如何整合RabbitMQ。


一。生產者工程

1.在pom.xml檔案中匯入rabbitmq依賴:

<!-- rabbitmq依賴-->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
  </dependency>

2.application.yml配置檔案配置如下:

server:
  port: 8001
spring:
  rabbitmq:
    host: localhost
    port: 5672
    virtual-host: hello
    username: guest
    password: guest

3.連線rabbitmq配置類如下:

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {
   //交換機名稱
   public static final String ITEM_TOPIC_EXCHANGE = "item_topic_exchange";
   //佇列名稱
   public static final String ITEM_QUEUE = "item_queue";

   //宣告交換機
   @Bean("itemTopicExchange")
   public Exchange topicExchange(){
       return ExchangeBuilder.topicExchange(ITEM_TOPIC_EXCHANGE).durable(true).build();
   }

   //宣告佇列
   @Bean("itemQueue")
   public Queue itemQueue(){
       return QueueBuilder.durable(ITEM_QUEUE).build();
   }

   //繫結佇列和交換機
   @Bean
   public Binding itemQueueExchange(@Qualifier("itemQueue") Queue queue,
                                    @Qualifier("itemTopicExchange") Exchange exchange){
       return BindingBuilder.bind(queue).to(exchange).with("item.#").noargs();
   }

}

4.控制器示例程式碼如下:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 傳送訊息的測試類
 */
@RestController
public class SendMsgController {

   //注入RabbitMQ的模板
   @Autowired
   private RabbitTemplate rabbitTemplate;

   /**
    * 測試
    */
   @GetMapping("/sendmsg")
   public String sendMsg(@RequestParam String msg, @RequestParam String key){

       /**
        * 傳送訊息
        * 引數一:交換機名稱
        * 引數二:路由key
        * 引數三:傳送的訊息
        */
       rabbitTemplate.convertAndSend(RabbitMQConfig.ITEM_TOPIC_EXCHANGE ,key ,msg);

       //返回訊息
       return "傳送訊息成功!";
   }
}

5.啟動類程式碼如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RabbitmqProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(RabbitmqProducerApplication.class,args);
    }
}

二。消費者工程

1.與生產者工程一樣,在pom.xml檔案中匯入rabbitmq依賴

<!-- rabbitmq依賴-->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
  </dependency>

2.application.yml配置檔案配置如下:

server:
  port: 8002
spring:
  rabbitmq:
    host: localhost
    port: 5672
    virtual-host: hello
    username: guest
    password: guest

3.監聽佇列類程式碼如下:

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MyListener {

   /**
    * 監聽某個佇列的訊息
    * @param message 接收到的訊息
    */
   @RabbitListener(queues = "item_queue")
   public void myListener1(String message){
        System.out.println("消費者接收到的訊息為:" + message);
    }
}

4.啟動類程式碼如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RabbitmqConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(RabbitmqConsumerApplication.class,args);
    }
}

三。測試

1.先啟動生產者,通過瀏覽器訪問介面傳送三條訊息進入佇列中:

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
2.開啟rabbit管控臺,可以檢視到新建立的item_topic_exchange交換機以及所繫結的item_queue佇列:

在這裡插入圖片描述

在這裡插入圖片描述

3.檢視到item_queue佇列中有含有三條未消費的訊息:

在這裡插入圖片描述
4.啟動消費者,消費者消費訊息:

在這裡插入圖片描述
至此,springboot與rabbitmq訊息佇列整合成功!

相關文章