Spring Boot 集成 RabbitMQ

Jason's Blog / 2024-09-26 / 原文

  • 1. Spring Boot 集成 RabbitMQ
    • 1.1. 版本说明
    • 1.2. Spring 配置
    • 1.3. 定义常量
    • 1.4. 配置交换机和队列
    • 1.5. 测试

1. Spring Boot 集成 RabbitMQ

1.1. 版本说明

构件 版本
spring-boot 2.7.18
spring-boot-starter-amqp 2.7.18

1.2. Spring 配置

spring:
  application:
    name: spring-rabbit-demo
  rabbitmq:
    addresses: 127.0.0.1:5672
    username: admin
    password: admin
    virtual-host: /

1.3. 定义常量

public class RabbitConstants {
    public static final String QUEUE = "spring-rabbit-demo-queue";
    public static final String EXCHANGE = "spring-rabbit-demo-exchange";
}

1.4. 配置交换机和队列

@Configuration
@Slf4j
public class RabbitConfiguration {

    @Bean
    public Queue queue() {
        return QueueBuilder.durable(RabbitConstants.QUEUE).build();
    }

    @Bean
    public FanoutExchange exchange() {
        return ExchangeBuilder.fanoutExchange(RabbitConstants.EXCHANGE).durable(true).build();
    }

    @Bean
    public Binding binding() {
        return BindingBuilder.bind(queue()).to(exchange());
    }
}

1.5. 测试

@Component
@Slf4j
public class SpringRabbitDemo implements ApplicationRunner {

    @Resource
    private RabbitTemplate rabbitTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        String payload = "hello, queue";
        rabbitTemplate.convertAndSend(RabbitConstants.EXCHANGE, null, payload);
        log.info("send a message, exchange: {}, payload: {}", RabbitConstants.EXCHANGE, payload);
    }

    @RabbitListener(queues = {RabbitConstants.QUEUE})
    public void listen(Message<String> message) {
        log.info(
                "received a message, queue: {}, exchange: {}, payload: {}",
                message.getHeaders().get(CONSUMER_QUEUE),
                message.getHeaders().get(RECEIVED_EXCHANGE),
                message.getPayload()
        );
    }
}

启动程序,控制台将输出:

send a message, exchange: spring-rabbit-demo-exchange, payload: hello, queue
received a message, queue: spring-rabbit-demo-queue, exchange: spring-rabbit-demo-exchange, payload: hello, queue