SpringBoot整合RabbitMQ实现生产消费消息

创建SpringBoot项目

我这里使用Java8,jdk1.8,maven项目,springboot2.6.11版本

添加依赖

需要用到的全部依赖:

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
    </dependencies>

配置文件

将配置文件改为.yml后缀
添加:

server:
  port: 8080
spring:
  application:
    name: rabbitmq-provider
  rabbitmq:
    host: localhost
    port: 5672
    username: admin
    password: admin
    #确认消息已发送到交换机
    #publisher-confirm-type: correlated
    #确认消息已发送到队列(Queue)
    #publisher-returns: true

最后两个配置我们之后会讲到,这里可以先不使用

项目结构

在这里插入图片描述
其中:P为生产者
C为消费者
X为直连交换机
A为队列
XA为RoutingKey,是X与A连接的线路
在这个结构中可以不使用交换机X,但是为了完整性,这里还是加上了。
对一些基本概念,比如生产者消费者等,或者对交换机种类还不是很了解的,可以下去学习一下:

配置类代码

配置类主要作用是声明交换机,队列,并进行绑定

@Configuration
public class Config {
    
    

    //换机名称
    public static final  String X_EXCHANGE="X";
    //队列名称
    public static final String QUEUE_A="A";
	//声明交换机xExchange
    @Bean("xExchange")
    public DirectExchange xExchange(){
    
    
        return new DirectExchange(X_EXCHANGE);
    }
	//声明队列A
    @Bean("queueA")
    public Queue queueA(){
    
    
        return QueueBuilder.durable(QUEUE_A).build();
    }
    //绑定交换机与队列
    //A与X通过XA线路绑定
    @Bean
    public Binding queueABindingX(@Qualifier("queueA") Queue queueA,
                                   @Qualifier("xExchange") DirectExchange xExchange ){
    
    
        return BindingBuilder.bind(queueA).to(xExchange).with("XA");
    }

生产者代码

@Slf4j
@RestController
@RequestMapping("/myMQ")
public class ProduceController {
    
    
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @GetMapping("/sendMessage/{message}")
    public void sendMessage(@PathVariable String message) {
    
    
        log.info("发送消息:{}",message);
        rabbitTemplate.convertAndSend("X", "XA",message);
    }
}

消费者代码

@Slf4j
@Component
public class Consumer {
    
    

    //接收消息
    @RabbitListener(queues="A")
    public void receiveA(Message message){
    
    
        log.info("当前时间:{},收到A队列的消息:{}",new Date().toString(),new String(message.getBody()));
    }
}

启动项目

docker中启动拉取的rabbitmq
在这里插入图片描述
启动项目
在这里插入图片描述

测试

在这里插入图片描述

在这里插入图片描述
测试成功

同系列文章

原理部分

MQ(消息队列)简介
RabbitMQ简介
RabbitMQ 四大核心概念及工作原理

操作部分

Windows版Docker安装RabbitMq
Maven整合RabbitMQ实现生产消费消息
RabbitMQ延迟队列及实战
RabbitMQ发布确认-交换机确认
RabbitMQ-消息回报(队列确认)
RabbitMQ-备份交换机
RabbitMQ-优先级队列

猜你喜欢

转载自blog.csdn.net/m0_68681879/article/details/129554597
今日推荐