首页 > 其他分享 >springboot整合rabbitmq实现延迟队列

springboot整合rabbitmq实现延迟队列

时间:2024-08-25 16:37:41浏览次数:8  
标签:return springboot 队列 springframework rabbitmq org import public amqp

 

一、rabbitmq安装

使用dicker进行安装,点击查看

 

二、引入maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>2.5.15</version>
</dependency>

 

三、配置yml

spring:
  rabbitmq:
    host: localhost
    port: 5674
    username: admin
    password: 123456
    virtual-host: delayed_vhost # 创建对应的Virtual Hosts
    listener:
      simple:
        concurrency: 5
        prefetch: 10
        retry:
          enabled: true   # 允许消息消费失败的重试
          max-attempts: 3   # 消息最多消费次数3次
          initial-interval: 2000    # 消息多次消费的间隔2秒

 

四、RabbitmqConfig

package com.base.framework.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.CustomExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;


@Configuration
public class RabbitmqConfig {
    /**
     * 延时队列交换机
     * 注意这里的交换机类型:CustomExchange
     *
     * @return
     */
    @Bean
    public CustomExchange delayExchange() {
        Map<String, Object> args = new HashMap<>();
        args.put("x-delayed-type", "direct");
        //属性参数 交换机名称 交换机类型 是否持久化 是否自动删除 配置参数
        return new CustomExchange("delay_exchange", "x-delayed-message", true, false, args);
    }


    /**
     * 延时队列
     *
     * @return
     */
    @Bean
    public Queue delayQueue() {
        //属性参数 队列名称 是否持久化
        return new Queue("delay_queue", true);
    }

    /**
     * 给延时队列绑定交换机
     *
     * @return
     */
    @Bean
    public Binding cfgDelayBinding() {
        return BindingBuilder.bind(delayQueue()).to(delayExchange()).with("delay_key").noargs();
    }
}

 

五、配置RabbitListener

package com.base.system.listener;

import com.base.common.core.domain.entity.SysUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class UserRabbitListener {

    @RabbitListener(queues = "delay_queue")
    public void consumeMessage(SysUser user) {
        log.info("收到消息:" + user.getUserName());
    }
}

 

六、发送消息

    private final RabbitTemplate rabbitTemplate;

    @GetMapping("createMessageTest")
    public String createMessageTest(@RequestParam Integer time) {

        SysUser sysUser = userService.selectUserById(1L);

        this.rabbitTemplate.convertAndSend(
                "delay_exchange",
                "delay_key",
                sysUser,
                message -> {
                    message.getMessageProperties().setDelay(time);
                    return message;
                }
        );
        return "创建消息成功";
    }

 

标签:return,springboot,队列,springframework,rabbitmq,org,import,public,amqp
From: https://www.cnblogs.com/fyiyy/p/18379099

相关文章

  • 【网站项目】SpringBoot595七彩云南文化旅游网站
    ......
  • 【网站项目】SpringBoot602旅游管理系统
    ......
  • 【网站项目】SpringBoot595七彩云南文化旅游网站
    ......
  • 【网站项目】SpringBoot602旅游管理系统
    ......
  • RabbitMQ 相关概念及简述
    总结自:BV15k4y1k7EpRabbitMQ是一款常用的消息队列(MQ)。什么是消息队列MQ全称为MessageQueue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信。消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,......
  • RabbitMQ 入门示例
    参考:BV15k4y1k7EpRabbitMQ相关概念及简述中简单介绍了RabbitMQ提供的6种工作模式。下面以简单模式为例,介绍RabbitMQ的使用。新建工程先新建Maven工程RabbitMQ作为父工程,在父工程下新建三个子模块:common:公共包producer:生产者consumer:消费者在三个模块中添加......
  • SpringBoot文档之JSON的阅读笔记
    ReferenceCoreFeaturesJSON支持Gson、Jackson、JSON-B。SpringBoot提供了组件spring-boot-starter-json。注解,如下:@JsonComponent@JsonMixin重要的类,如下:JsonSerializerJsonDeserializerKeyDeserializerJsonObjectSerializerJsonObjectDeserializer参......
  • 消息队列-RabbitMQ学习笔记(一)
    1.什么是消息队列消息队列(MessageQueue,简称MQ)是一种用于在应用程序之间传递消息的技术,通常在分布式系统中使用。它提供了一种异步通信机制,使得应用程序可以通过发送和接收消息来进行数据交换。消息队列可以用来存储消息,这就涉及到消息队列的三个关键字:存储、消息、队列......
  • linux下试验中间件canal的example示例-binlog日志的实时获取显示以及阿里巴巴中间件ca
    一、linux下试验中间件canal的example示例-binlog日志的实时获取显示    今天重装mysql后,进行了canal的再次试验,原来用的mysql5.7,今天重装直接换了5.6算了。反正测试服务器的mysql也不常用。canal启动后日志显示examplepreparetofindstartpositionjustshowmaste......
  • 使用DropZone+SpringBoot实现图片的上传和浏览
    经常在项目中需要使用上传文件功能,找了不少前端上传组件,都不是很好用,今天尝试了一下DropZone,发现不错,顺便记录一下使用过程,方便后续查阅。在做开发的时候,经常需要调研一些技术,因此前后端都需要用到,为方便开发,这里采用传统的开发方式,没有做前后端分离,方便调试。前端采用HTML+......