SpringBoot项目整合RabbitMQ

前言:

本篇博客主要说明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消息队列整合成功!

猜你喜欢

转载自blog.csdn.net/weixin_44009447/article/details/111387744
今日推荐