首页 > 其他分享 >Spring Boot 集成 RabbitMQ 发送延时消息

Spring Boot 集成 RabbitMQ 发送延时消息

时间:2024-09-27 14:48:01浏览次数:9  
标签:exchange Spring Boot delayed RabbitMQ 延时 spring message public

1. Spring Boot 集成 RabbitMQ 发送延时消息

延时消息依赖于 rabbitmq-delayed-message-exchange RabbitMQ 插件实现,Github 地址
启用该插件后可以创建 x-delayed-message 类型的交换机,该类型的交换机可以支持延时消息。
Spring 已原生支持此插件。
下载相应版本的 .ez 文件到 RabbitMQ 安装目录下的 plugins 文件夹里,执行以下命令启用插件:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

1.1. 版本说明

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

1.2. Spring 配置

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

1.3. 定义常量

public static final String QUEUE = "spring-rabbit-delay-exchange-demo-queue";
public static final String EXCHANGE = "spring-rabbit-delay-exchange-demo-exchange";
public static final String DELAYED_ROUTING_KEY = "delayed-routing-key";

1.4. 配置交换机和队列

@Configuration
@Slf4j
public class RabbitDelayExchangeConfiguration {

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

    @Bean
    public Exchange exchange() {
        return ExchangeBuilder.directExchange(EXCHANGE)
                .delayed() // 设置为延时交换机
                .durable(true)
                .build();
    }

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

1.5. 测试

@Component
@Slf4j
public class SpringRabbitDelayExchangeDemo implements ApplicationRunner {

    @Resource
    private RabbitTemplate rabbitTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        String payload = "this is a delayed message";
        MessageProperties messageProperties = new MessageProperties();
        //延时 3 秒
        messageProperties.setDelay(3000);
        rabbitTemplate.convertAndSend(
                EXCHANGE,
                DELAYED_ROUTING_KEY,
                MessageBuilder.withBody(payload.getBytes(UTF_8))
                        .andProperties(messageProperties)
                        .build()
        );
        log.info("at {} sent a delayed message, exchange: {}, payload: {}", LocalDateTime.now(), EXCHANGE, payload);
    }

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

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

at 2024-09-27T14:28:07.183930 sent a delayed message, exchange: spring-rabbit-delay-exchange-demo-exchange, payload: this is a delayed message
at 2024-09-27T14:28:10.261180 received a message, queue: spring-rabbit-delay-exchange-demo-queue, exchange: spring-rabbit-delay-exchange-demo-exchange, payload: this is a delayed message

可以看出在发出消息 3 秒后接收到了延时消息。

标签:exchange,Spring,Boot,delayed,RabbitMQ,延时,spring,message,public
From: https://www.cnblogs.com/jason207010/p/18435636

相关文章

  • springFactoriesLoader作用是读取配置文件
    `SpringFactoriesLoader`是Spring框架中的一个类,用于从`META-INF/spring.factories`文件中加载配置。这是一个非常强大的机制,使得Spring能够通过查找类路径上的配置文件,动态地发现和加载特定的组件或服务。在Spring自动注入(自动配置)中,`SpringFactoriesLoader`起到了以......
  • 【Java】【SpringBoot】SpringBoot整合MybatisPlus(快速入门)
    较早之前,写了SpringBoot整合Mybatis:https://www.cnblogs.com/luyj00436/p/16701894.html。这个数据库的链接有过时。Mybatisplus是mybatis的增强工具。对比Mybatis功能强大、易于使用。对于复杂业务,需要连接多张表单,Mybatisplus不够灵活,隐藏了代码,也不能更好地调试;对于简单业务......
  • springboot在线教学平台
    基于springboot+vue实现的在线教学平台 (源码+L文+ppt)4-069 4.1系统结构设计  这些功能可以充分满足在线教学平台的需求。此系统功能较为全面如下图系统功能结构如图4-1所示。        图4-1功能结构图         4.2系统功能模块设计......
  • Spring简介
     1.Spring简介pring的基础架构起源于2000年早期,它是RodJohnson在一些成功的商业项目中构建的基础设施2002后期,RodJohnson发布了《ExpertOne-on-OneJ2EEDesignandDevelopment》一书2003年2月Spring框架正式成为一个开源项目,并发布于SourceForge中1.2Spring工作原理......
  • springboot在线教学平台
     基于springboot+vue实现的在线教学平台 (源码+L文+ppt)4-069 4.1系统结构设计  这些功能可以充分满足在线教学平台的需求。此系统功能较为全面如下图系统功能结构如图4-1所示。        图4-1功能结构图         4.2系统功能模块设......
  • springboot在线教学平台
     基于springboot+vue实现的在线教学平台 (源码+L文+ppt)4-069 4.1系统结构设计  这些功能可以充分满足在线教学平台的需求。此系统功能较为全面如下图系统功能结构如图4-1所示。        图4-1功能结构图         4.2系统功能模块设......
  • 基于SpringBoot 应用Stream流+递归 实现多级分类
    SpringBoot->Stream流实现步骤:先查询所有级联的数据,然后通过Java8 Stream 流来比较和判断,最终生成有顺序的级联数据实体类:@DatapublicclassAddr{/***主键id*/privateLongaddrId;/***名称*/privateStringaddrNam......
  • springboot在线教学平台
     基于springboot+vue实现的在线教学平台 (源码+L文+ppt)4-069 4.1系统结构设计  这些功能可以充分满足在线教学平台的需求。此系统功能较为全面如下图系统功能结构如图4-1所示。        图4-1功能结构图         4.2系统功能模块设......
  • [微信小程序原创项目]基于Springboot+Vue+Uniapp的通用商城小程序、商城管理系统
    项目提供:完整源码+数据库sql文件+数据库表Excel文件关注我的B站:程序员阿水呀,带小白学习更多干货教程!1、项目功能描述本项目为双角色,用户和管理员,用户使用小程序前台,管理员使用web后台。1.1注册注册功能:填写用户名、密码进行注册。仅开放小程序端即用户端进行注册。......
  • PbootCMS模板调用幻灯片轮播图及参数说明
    在PbootCMS中,使用幻灯片轮播图功能非常方便。下面详细介绍如何在模板中调用幻灯片轮播图及其参数说明。幻灯片轮播图的调用语法{pboot:slidegid=*num=*}{/pboot:slide}参数说明gid=*:分组,必填,用于控制需要输出的幻灯片分组。num=*:数量,非必填,用于控制需要输出的数量,默......