Spring Boot RabbitMQ - 优先级队列

Spring Boot整合RabbitMQ实现延迟队列和优先级队列 在本文中,我们将探讨如何使用Spring Boot与RabbitMQ实现延迟队列和优先级队列的功能。优先级队列是一种根据消息的优先级进行排序的队列,优先级高的消息会被优先消费。延迟队列和优先级队列是在消息队列中常见的功能,它们在特定的业务场景中非常有用。在本文中,我们将使用Spring Boot与RabbitMQ来实现延迟队列和优先级队列的功能。优先级队列是一种根据消息的优先级进行排序的队列,优先级高的消息会被优先消费。在RabbitMQ中,我们可以通过设置消息的优先级属性来实现优先级队列的功能。 阅读详情

Docker With RabbitMQ

官方 Docker 镜像仓库地址

https://hub.docker.com/_/rabbitmq

本地运行 RabbitMQ

docker run -d \
--name rabbitmq \
--restart always \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=user \
-e RABBITMQ_DEFAULT_PASS=password \
rabbitmq:3-management

访问可视化面板

地址:http://127.0.0.1:15672/

账号:user

密码:password

Spring Boot With RabbitMQ

Spring Boot 集成 RabbitMQ

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

基本参数配置

# host & port
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672

Queue / Exchange / Routing 配置

/**
 * RabbitMQ 配置
 */
@Configuration
public class RabbitMQConfig {

    private static final String EXCHANGE = "priority-exchange";

    public static final String QUEUE = "priority-queue";

    private static final String ROUTING_KEY = "priority.queue.#";

    /**
     * 定义优先级队列
     */
    @Bean
    Queue queue() {
        Map<String, Object> args= new HashMap<>();
        args.put("x-max-priority", 100);
        return new Queue(QUEUE, false, false, false, args);
    }

    /**
     * 定义交换器
     */
    @Bean
    TopicExchange exchange() {
        return new TopicExchange(EXCHANGE);
    }

    @Bean
    Binding binding(Queue queue, TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);
    }

}

priority queue 定义参考官方文档:https://www.rabbitmq.com/priority.html

Spring Boot 应用启动后,会自动创建 Queue 和 Exchange ,并相互绑定,优先级队列会有如图所示标识。

RabbitMQ Publisher

Spring Boot 相关配置

# 是否开启消息发送到交换器(Exchange)后触发回调
spring.rabbitmq.publisher-confirms=false
# 是否开启消息发送到队列(Queue)后触发回调
spring.rabbitmq.publisher-returns=false
# 消息发送失败重试相关配置
spring.rabbitmq.template.retry.enabled=true
spring.rabbitmq.template.retry.initial-interval=3000ms
spring.rabbitmq.template.retry.max-attempts=3
spring.rabbitmq.template.retry.max-interval=10000ms
spring.rabbitmq.template.retry.multiplier=1

发送消息

@Component
@AllArgsConstructor
public class FileMessageSender {

    private static final String EXCHANGE = "priority-exchange";

    private static final String ROUTING_KEY_PREFIX = "priority.queue.";

    private final RabbitTemplate rabbitTemplate;

    /**
     * 发送设置有优先级的消息
     *
     * @param priority 优先级
     */
    public void sendPriorityMessage(String content, Integer priority) {
        rabbitTemplate.convertAndSend(EXCHANGE, ROUTING_KEY_PREFIX   "test", content,
                message -> {
                    message.getMessageProperties().setPriority(priority);
                    return message;
                });
    }

}

RabbitMQ Consumer

Spring Boot 相关配置

# 消息接收确认,可选模式:NONE(不确认)、AUTO(自动确认)、MANUAL(手动确认)
spring.rabbitmq.listener.simple.acknowledge-mode=AUTO
# 最小线程数量
spring.rabbitmq.listener.simple.concurrency=10
# 最大线程数量
spring.rabbitmq.listener.simple.max-concurrency=10
# 每个消费者可能未完成的最大未确认消息数量
spring.rabbitmq.listener.simple.prefetch=1

消费者执行耗时较长的话,建议 spring.rabbitmq.listener.simple.prefetch 设置为较小数值,让优先级越高的消息更快加入到消费者线程。

监听消息

@Slf4j
@Component
public class MessageListener {

    /**
     * 处理消息
     */
    @RabbitListener(queues = "priority-queue")
    public void listen(String message) {
        log.info(message);
    }

}

番外补充

1、自定义消息发送确认的回调

配置如下:

# 开启消息发送到交换器(Exchange)后触发回调
spring.rabbitmq.publisher-confirms=true
# 开启消息发送到队列(Queue)后触发回调
spring.rabbitmq.publisher-returns=true

自定义

RabbitTemplate.ConfirmCallback

实现类

@Slf4j
public class RabbitConfirmCallBack implements RabbitTemplate.ConfirmCallback{

    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        log.info("消息唯一标识: {}", correlationData);
        log.info("确认状态: {}", ack);
        log.info("造成原因: {}", cause);
    }

}

自定义

RabbitTemplate.ConfirmCallback

实现类

@Slf4j
public class RabbitReturnCallback implements RabbitTemplate.ReturnCallback {

    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
        log.info("消息主体: {}", message);
        log.info("回复编码: {}", replyCode);
        log.info("回复内容: {}", replyText);
        log.info("交换器: {}", exchange);
        log.info("路由键: {}", routingKey);
    }

}

配置 rabbitTemplate

@Component
@AllArgsConstructor
public class RabbitTemplateInitializingBean implements InitializingBean {

    private final RabbitTemplate rabbitTemplate;

    @Override
    public void afterPropertiesSet() {
        rabbitTemplate.setConfirmCallback(new RabbitConfirmCallBack());
        rabbitTemplate.setReturnCallback(new RabbitReturnCallback());
    }
    
}

2、RabbitMQ Exchange 类型

中文:RabbitMQ Exchange类型详解

English: RabbitMQ Tutorials

© 著作权归作者所有,转载或内容合作请联系作者

img

● Java单元测试之JUnit 5快速上手

● 高薪必备的一些Spring Boot高级面试题

● Spring Boot 2.x 中的 Actuator

● 下一代应用监控指标采集器Prometheus核心介绍

● Spring中@Async注解实现“方法”的异步调用

● 学并发编程,透彻理解这三个核心是关键

● 缓存抽象层Spring cache实战操作

● 简述设计模式原则

● 并发Bug之源有三,请睁大眼睛看清它们

● 责任链设计模式讲解

● Java Web 面试中关于Spring MVC的必问题,不收藏血亏!

● Micronaut 微服务中使用 Kafka

● 微服务网关除了zuul、spring cloud gateway还有更出色的

● RSocket——Http协议的替代者

● java中的数字以及如何判断字符串是不是数字

● 学好Spring Security 和Apache Shiro你需要具备这些条件

● Spring Security 实战干货:如何保护用户密码

本文由博客一文多发平台 OpenWrite 发布!

rabbitmq结合spring实现消息队列优先级的方法 本篇文章主要介绍了rabbitmq结合spring实现消息队列优先级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 立即下载

相关推荐

从零开始掌握Python机器学习:七步教程 基础篇

前言 「开始」往往是最难的,尤其是当选择太多的时候,一个人往往很难下定决定做出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,而且这个过程中仅需要使用免费的材料和资源即可。 第一步:基本 Python 技能 如果我们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是至关重要的。 首先,你需要安装 Python。因为我们后...

hcgx2018的博客 1614

SpringBoot: RabbitMq队列之优先级

SpringBoot: RabbitMq队列之优先级实践

GIS摆渡人 684

flink定位反压节点

在 Apache Flink 中定位反压(Backpressure)节点需要结合监控工具和作业行为分析。

2301_80954266的博客 1048

在使用springAMQ时,设置消息的优先级

在使用springAMQ时,设置消息的优先级

weixin_44877713的博客 260

llama.cpp量化模型在MTT显卡上的性能对比:S80/S3000/S4000实测数据

本文基于摩尔线程MTT S80、S3000和S4000三款显卡,对llama.cpp量化模型进行了深度性能实测。报告详细对比了不同量化精度(如Q4_K_M、Q6_K)在Llama 3.2 1B和Qwen 2.5 7B模型上的推理速度、显存占用、功耗及温度表现,为开发者根据硬件选择最优模型配置与参数调优提供了关键数据参考和实战指南。

week9的博客 351

Cartographer从安装到实战:手把手教你运行2D/3D建图与定位

本文提供了一份详尽的Cartographer从零安装到实战应用的完整指南。内容涵盖环境准备、依赖编译、源码构建等关键步骤,并手把手指导读者运行2D/3D官方数据集进行建图与定位测试。文章深入解析了参数配置与自定义数据适配方法,帮助开发者快速掌握这一强大的实时同步定位与建图工具,并将其应用于机器人导航与自动驾驶等实际场景。

rice5的博客 952

RabbitMQ学习笔记:消息优先级(priority)

概括 RabbitMQ在版本3.5.0中有优先级队列的实现,任何队列可以通过设置可选参数x-max-priority转换为优先级队列;这个参数应该是1到255之间的正整数,推荐设置1到10之间的数值,表示队列应该支持的最大优先级; 声明优先级队列 Channel ch = ...; Map<String, Object> args = new HashMap<String, ...

OceanSky的专栏 6725

风力发电机并网模型建立及仿真验证

传统能源日益匮乏,环境污染日趋严重,全球向安全、可靠和环保的可持续能源体系转型迫在眉睫,风电迎来了重要的发展契机。近年来,全球风电迅猛发展,我国已成为世界风电新增装机容量第一的国家。然而,随着风电规模的不断增大,风电场接入对系统影响不容忽视。随着变速恒频风力发电系统优越的性能突出和大容量电力电子技术的成熟,风速随机性引起的功率波动及故障情况下的动态响应,对电能质量,系统电压、频率的稳定性产生的影响需要深入研究。因而,本文结合实际项目,针对变速恒频风力发电系统建模,端口动态特性及对电网电能质量、运行稳定性的影

毕业设计区博客 1643

posix自定义消息队列_Spring Boot RabbitMQ 优先级队列

Anoyi读完需要10分钟速读仅需4分钟 Docker With RabbitMQ官方 Docker 镜像仓库地址https://hub.docker.com/_/rabbitmq本地运行 RabbitMQdocker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management访问可视化面板地址:h...

weixin_39768762的博客 289

WorkBuddy CAD 审图救命课:约束、单位、尺寸链一次查清,打样前拦住返工

最危险的 CAD 文件不是打不开,而是看起来完整却混用了毫米与英寸、草图欠约束、关键尺寸没有来源。审图任务必须先列规则,再输出问题位置。 本课不会用“AI 一键完成”制造错觉,而是把 WorkBuddy、FreeCAD 0.21.2、OpenCascade 7.7 与人工审阅组成一条可复现链路。你会从“一份模拟 STEP 文件、参数表、装配基准与审图标准”出发,得到“单位报告、约束清单、尺寸链风险表与人工复核标记”,并学会用真实命令、错误信号和停止条件判断成果能不能进入下一阶段。

yueyeguzhuo的专栏 269

idea出现 EXCEPTION_ACCESS_VIOLATION (0xc0000005) 的解决方法

idea启动的时候出现如下问题,以为没啥事,就索性关闭 后面再打开idea的时候发现直接闪退,之后打开其他软件,直接蓝屏

码农研究僧的博客 4817

springboot整合rabbitmq优先队列

优先队列,是消息阻塞中形成的,所以要先生产消息,后开启消费者。否则生产一条消息消费一条消息,不存在阻塞,无法排序。

m0_49382941的博客 387

六、数据资产平台功能架构

该架构图展示了一个功能完善的数据资产平台,它涵盖了数据资产管理的各个方面,从数据采集、模型设计、编目到使用和分析。通过该平台,企业可以更好地管理数据资产,提高数据利用效率,并为业务决策提供有力支持。

moton2017的博客 1627

rabbitmq中的优先级队列,死信队列的实现

应用的场景:主要的就是生产者的生产速度大于消费速度,如果低于那么优先就没有任何的意义了 优先级队列的实现主要有两个方面:队列的优先级 发送消息时的优先这两个问题 代码是在spriingboot整合rabbitmq基础上改造过来的,创建队列时,给队列设置一个优先级 /** * 直连的队列名称 * @return */ @Bean public Queue testDirectQueue(){ /** * dureable:是否持

a_liuren的博客 538

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RabbitMQ技术深度解析:从核心概念到Spring Boot实战

1 RabbitMQ概述与核心概念 RabbitMQ是一个实现了高级消息队列协议(AMQP)的开源消息代理软件,用Erlang语言编写。作为分布式系统中重要的中间件组件,它充当消息的中间人角色,负责接收、存储和转发消息,帮助系统实现异步通信、服务解耦和流量削峰。 在现代分布式系统架构中,RabbitMQ解决了多个关键问题:异步处理使得非必要业务逻辑可以后台执行,提高系统响应速度;应用解耦让生产者和消费者无需相互了解或同时在线;流量削峰能够缓冲突发流量,防止后端系统被压垮。这些特性使RabbitMQ成为电商、

m0_50935332的博客 1169

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RabbitMQ学习文档(进阶篇(Demo使用SpringBoot编写))

无

qq_42449963的博客 2535

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RabbitMQ 高级特性实战(基于 Spring Boot)

消息“死”了 = 被拒收 or 到期未处理 or 队列爆满。这些消息不能直接丢,应该转送到死信交换机(DLX),转发到死信队列 Dead Queue里去,做二次处理。特性应用场景核心机制消费端限流削峰填谷手动签收 + prefetch 限制不公平分发谁快谁多消息存活时间 TTL定时处理/过期丢弃队列 TTL/消息 TTL优先级队列大客户优先死信队列异常消息“转院”延迟队列定时取消/延迟处理任务TTL + 死信组合。

m0_60456028的博客 1127

RabbitMQ快速入门指南

本文全面介绍了消息队列(MQ)及其主流产品RabbitMQ的核心概念与应用。首先阐述了MQ的异步通信机制、应用场景(解耦、削峰、异步处理等)及常见产品对比。重点解析RabbitMQ的基础架构,包括Exchange类型(Direct/Fanout/Topic/Headers)、队列特性、路由机制等核心组件。详细演示了SpringBoot集成RabbitMQ的配置方法,涵盖生产者/消费者实现、消息转换、ACK确认机制等关键技术。最后深入探讨高级特性:死信队列处理、TTL过期控制、优先级队列等可靠性方案,为

weixin_51326478的博客 1366

Rabbitmq快速入门

文章目录消息中间件基础概念Rabbitmq概述 消息中间件 基础概念 mq的基础概念和各个mq之间的比较,这篇博客比较全面 https://blog.youkuaiyun.com/wqc19920906/article/details/82193316 Rabbitmq 概述

admin522043032的博客 798

RabbitMQ 3.12 死信队列实战:Spring Boot 3.x 集成与订单超时取消场景

本文详细介绍了RabbitMQ 3.12死信队列在Spring Boot 3.x中的实战应用,重点解析了订单超时自动取消场景的实现。通过完整的代码示例和配置说明,展示了如何构建高可用的消息队列系统,包括死信队列的拓扑设计、消息TTL设置、监控策略及性能优化建议,帮助开发者高效处理分布式系统中的异常消息。

ainixi7099的博客 319

RabbitMQ实战:如何用Spring Boot解决订单系统的消息积压问题?

本文详细介绍了如何利用RabbitMQ和Spring Boot解决电商订单系统的消息积压问题。通过动态消费者扩容、死信队列配置、优先级队列实现以及全链路监控等高级应用策略,有效提升系统弹性和处理能力,确保高并发场景下的订单处理效率。特别适合面临消息队列性能挑战的开发者参考。

sony5的博客 558

RabbitMQ--进阶篇

RabbitMQ进阶主要从消息可靠性投递、消息持久化、ACK与NACK机制、消费端限流、消息超时、死信队列、延迟队列、事务消息、惰性队列和优先级队列等高级特性出发。来进行探讨Rabbit MQ的高级属性以及相关功能

2402_88002981的博客 1478
上一篇: Micronaut 微服务中使用 Kafka
下一篇: Java面试通关要点汇总集之框架篇参考答案
SpringForAll
博客等级 码龄7年 15粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值