IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Springboot整合 RabbitMQ 延迟队列 -> 正文阅读

[大数据]Springboot整合 RabbitMQ 延迟队列

(一)RabbitMq开启延迟队列

rabbitmq 延迟队列的实现,需要插件的支持

参考 :docker 安装 rabbitmq并添加延迟队列插件

(二)项目设置

(1)依赖

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

(2)yml配置

spring:
  rabbitmq:
    host: xxx
    port: xxx
    username: xxx
    password: xxx

(三)延迟消息实现核心配置

延迟对列的实现,实质主要是要定义且配置一个延迟交换机

@Bean
public Exchange delayExchange() {
    Map<String, Object> args = new HashMap<>(2);
    //  x-delayed-type    声明 延迟交换机的类型为路由直连
    args.put("x-delayed-type", "direct");
    // 设置名字 交换机类型(延迟消息) 持久化 不自动删除 
    return new CustomExchange("test-delayed-exchange", "x-delayed-message", true, false, args);
}

核心:

自定义参数定义交换机类型:

Map<String, Object> args = new HashMap<>(2);
args.put("x-delayed-type", "direct");

申明交换机中的消息为延迟消息:

上边CustomExchange 构造器中的第二个参数x-delayed-message


我们接下来进行一个完整的配置定义,我们定义交换机,定义队列,队列交换机路由件绑定

package com.leilei.delayed;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

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

/**
 * @author lei
 * @version 1.0
 * @date 2021/9/19 18:25
 * @desc rabbitMq延迟消息配置示例 (rabbitmq需安装 延迟消息插件  http://www.rabbitmq.com/community-plugins.html)
 */
@Configuration
public class RabbitMqDelayedConfig {


    @Bean
    public Exchange delayExchange() {
        Map<String, Object> args = new HashMap<>(2);
        //  x-delayed-type    声明 延迟队列Exchange的类型
        args.put("x-delayed-type", "direct");
        // 设置名字 交换机类型 持久化 不自动删除 
        return new CustomExchange("test-delayed-exchange", "x-delayed-message", true, false, args);
    }

    @Bean
    public Queue delayQueue() {
        return QueueBuilder.durable("test-delayed-queue").build();
    }

    /**
     * 将延迟队列通过routingKey绑定到延迟交换器
     *
     * @return
     */
    @Bean
    public Binding delayQueueBindExchange(Exchange delayExchange, Queue delayQueue) {
        return BindingBuilder.bind(delayQueue).to(delayExchange).with("leilei").noargs();
    }

}

(四)发送延迟消息

(1)延迟消息生产者

延迟消息的发送,与普通队列发送消息大部分一致,但我们需要对message做额外的延时配置

EX:

@Service
public class DelayedProvider {
    private final AmqpTemplate rabbitTemplate;

    @Autowired
    public DelayedProvider(AmqpTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    public void send(int delayedTime, String messageBody) {
        // 指定之前定义的延迟交换机名 与路由键名
        rabbitTemplate.convertAndSend("test-delayed-exchange", "leilei", messageBody, message -> {
            // 延迟时间单位是毫秒
            message.getMessageProperties().setDelay(delayedTime);
            System.out.println("消息发送时间:" + LocalDateTime.now()
                    .format(DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm:ss")) +
                    "消息内容:" + messageBody);
            return message;
        });
    }
}

(2)延迟消息消费者

消费者端与普通的MQ消费者,一致,只需要监听对应的队列即可

@Service
public class DelayedConsumer {
    @RabbitListener(queues = "test-delayed-queue")
    public void testListenerDelayedMessage(Message message) {
        byte[] body = message.getBody();
        System.out.println(LocalDateTime.now() + new String(body));
    }
}

项目链接:Springboot+RabbitMQ

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:51:25  更:2021-09-20 15:53:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:20:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码