RabbitMQ操作实战

1.RabbitMQ安装

RabbitMQ Windows 安装、配置、使用 - 小白教程-腾讯云开发者社区-腾讯云下载erlang:http://www.erlang.org/downloads/https://cloud.tencent.com/developer/article/2192340

Windows 10安装RabbitMQ及延时消息插件rabbitmq_delayed_message_exchange - 民工黑猫 - 博客园安装RabbitMQ服务器 第一步:下载erlang 原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang。下载地址:http://www.erlang.org/downloads 第二步:下载RabbitMQ 下载地址:https://https://www.cnblogs.com/yyee/p/14281111.html

2.生产端确保消息发送到交换机和路由键

application.yml

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    virtual-host: /
    publisher-confirm-type: CORRELATED # 交换机的确认
    publisher-returns: true # 队列的确认
logging:
  level:
    com.atguigu.mq.config: info

RabbitConfig

@Configuration
@Slf4j
public class RabbitConfig implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnsCallback {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @PostConstruct
    public void initRabbitTemplate() {
        rabbitTemplate.setConfirmCallback(this);
        rabbitTemplate.setReturnsCallback(this);
    }

    // 发送到交换机-成功或失败
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        log.info("confirm() 回调函数打印 correlationData:{}, ack:{}, cause:{}", correlationData, ack, cause);
    }

    // 发送到队列-失败
    @Override
    public void returnedMessage(ReturnedMessage returned) {
        log.info("returnedMessage() 回调函数 msg:{}, replyCode:{}, replyText:{}, exchange:{}, routingKey:{}",
                new String(returned.getMessage().getBody()), returned.getReplyCode(), returned.getReplyText(), returned.getExchange(), returned.getRoutingKey());
    }
}
RabbitMQTest


    public static final String EXCHANGE_DIRECT = "exchange.direct.order";
    public static final String ROUTING_KEY = "order";



    @Autowired
    private RabbitTemplate rabbitTemplate;

    //发消息-生产端确保消息发到交换机和路由键
    rabbitTemplate.convertAndSend(EXCHANGE_DIRECT + "~", ROUTING_KEY + "~", "Message Test Confirm~~~ ~~~");

3.消费端手动ack

application.yml

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    virtual-host: /
    listener:
      simple:
        acknowledge-mode: manual # 把消息确认模式改为手动确认
        prefetch: 1 # 每次从队列中取回消息的数量
MyMessageListener

    public static final String QUEUE_NAME  = "queue.order";

    //接消息-消费端手动ack
    //@RabbitListener(queues = {QUEUE_NAME})
    public void processMessage(String dataString, Message message, Channel channel) throws IOException {
        //获取消息的deliveryTag
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        try {
            //核心操作
            log.info("消费端 消息内容:" + dataString);
            System.out.println(10 / 0);
            //核心操作成功返ACK
            channel.basicAck(deliveryTag, false);
        } catch (Exception e) {
            //获取消息是否重复投递
            Boolean redelivered = message.getMessageProperties().getRedelivered();
            //核心操作失败返NACK
            if (!redelivered) {
                //第一次投递,重新放回队列 (requeue:是否重新放回队列)
                channel.basicNack(deliveryTag, false, true);
                //channel.basicReject(deliveryTag, true);
            } else {
                //重复投递,不重新放回队列 (requeue:是否重新放回队列)
                channel.basicNack(deliveryTag, false, false);
                //channel.basicReject(deliveryTag, false);
            }
        }
    }

4.消息设置超时时间(通过消息后置处理器)


        rabbitTemplate.convertAndSend(EXCHANGE_TIMEOUT, ROUTING_KEY_TIMEOUT, "Test timeout", message -> {
            message.getMessageProperties().setExpiration("4000");
            return message;
        });

5.延迟消息(延迟插件)

Windows 10安装RabbitMQ及延时消息插件rabbitmq_delayed_message_exchange - 民工黑猫 - 博客园安装RabbitMQ服务器 第一步:下载erlang 原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang。下载地址:http://www.erlang.org/downloads 第二步:下载RabbitMQ 下载地址:https://https://www.cnblogs.com/yyee/p/14281111.htmlRabbitMQ延迟插件下载地址

Community Plugins | RabbitMQ RabbitMQ设置延迟消息的交换机

生产端发送延时消息(通过消息后置处理器)

        //延迟消息-延时插件(最多俩天内)
        String msg = "Test delay message by plugin " + new SimpleDateFormat("HH:mm:ss").format(new Date());
        rabbitTemplate.convertAndSend(EXCHANGE_DELAY, ROUTING_KEY_DELAY, msg, message -> {
            //x-delay参数必须基于x-delayed-message-exchange插件才能生效
            message.getMessageProperties().setHeader("x-delay", "10000");
            return message;
        });

消费端消费延时消息


    @RabbitListener(queues = {QUEUE_DELAY})
    public void processMessageDelay(String dataString, Message message, Channel channel) throws IOException {
        log.info("[delay message][消息本身]" + dataString);
        log.info("[delay message][当前时间]" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/978621.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java项目】基于Spring Boot的校园博客系统

【Java项目】基于Spring Boot的校园博客系统 技术简介:采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介:校园博客系统是一个典型的管理系统,主要功能包括管理员:首页、个人中心、博主管理、文章分类管理、文章信息…

【时时三省】(C语言基础)整型数据

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 整型数据 (1)基本整型(int型) 编译系统分配给int型数据2个字节或4个字节(由具体的C编译系统自行决定)。在存储单元中…

Ollama下载安装+本地部署DeepSeek+UI可视化+搭建个人知识库——详解!(Windows版本)

目录 1️⃣下载和安装Ollama 1. 🥇官网下载安装包 2. 🥈安装Ollama 3.🥉配置Ollama环境变量 4、🎉验证Ollama 2️⃣本地部署DeepSeek 1. 选择模型并下载 2. 验证和使用DeepSeek 3️⃣使用可视化工具 1. Chrome插件-Page …

数据库的sql语句

本篇文章主要用来收集项目开发中,遇到的各种sql语句的编写。 1、根据user表的role_id字段,查询role表。 sql语句:使用JOIN连接两个表 SELECT u.*,r.rolename FROM user u JOIN role r ON u.role_id r.id WHERE u.id 1; 查询结果&#xff1a…

Grok 3 vs. DeepSeek vs. ChatGPT:2025终极AI对决

2025 年,AI 领域的竞争愈发激烈,三个重量级选手争夺霸主地位:Grok 3(由 xAI 开发)、DeepSeek(国内 AI 初创公司)和 ChatGPT(OpenAI 产品)。每个模型都有自己独特的优势,无论是在深度思考、速度、编程辅助、创意输出,还是在成本控制方面,都展现出强大的实力。但究竟…

手机大厂如何处理安卓分屏退出后最近任务显示一半问题?

背景: 近来在有学员朋友在群里讨论到了一个分屏退出后,在桌面最近任务中的卡片显示异常问题,虽然他的问题和目前市场上的最近任务显示一半情况不一样。但是这里也刚好启发了群里vip学员们对这个最近任务对分屏task只显示一半画面问题进行相关…

Spring Cloud——路由网关Zuul

??? 哈喽!大家好,我是【一心同学】,一位上进心十足的【Java领域博主】!??? 【一心同学】的写作风格:喜欢用【通俗易懂】的文笔去讲解每一个知识点,而不喜欢用【高大上】的官方陈述。 【一心同学】博客…

WorldQuant Brain的专属语言——Fast Expression

使用brain需要的编程语言 在使用BRAIN平台时往往不需要事先有编码背景,因此小白也能很快对其上手,但有经验的程序员来讲,该平台暂时没有禁止API通信低强度进行时的程序化访问(但是非常不好意思😣怎么访问我没找到&…

人大金仓KCA | 对象访问权限入门

人大金仓KCA | 对象访问权限入门 一、知识预备1. 对象的分类2. 对象访问权限概述3. 级联授权4. 权限描述符5. 使用EasyKStudio查看用户权限 二、案例实施1. 用户授权综合案例2. 对象的创建者默认就是对象的所属主3. 该表对象的所属主4. 对象属主的权限设置5. 授权普通用户访问对…

StrokesPlus【电脑鼠标键盘手势软件】v0.5.8.0 中文绿色便携版

前言 StrokesPlus.net是一个超方便的手势识别软件,它能帮你用手势来代替鼠标和键盘操作。用起来既简单又灵活,功能还特别强大。 操作起来非常简单,它有好多实用的功能,比如智能识别你写的字、设定手势操作的区域、模拟鼠标的各种…

springBoot统一响应类型3.1版本

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

DDD 架构之领域驱动设计【通俗易懂】

文章目录 1. 前言2. MVC 对比 DDD3. DDD 分层架构4. 完整业务流程 1. 前言 官方回答:DDD是一种应对复杂业务系统的设计方法,通过将软件设计与业务领域紧密结合,帮助开发人员构建清晰、可维护的领域模型。在复杂的业务系统中,它能…

LeetCode 889.根据前序和后序遍历构造二叉树

题目: 给定两个整数数组,preorder 和 postorder ,其中 preorder 是一个具有 无重复 值的二叉树的前序遍历,postorder 是同一棵树的后序遍历,重构并返回二叉树。 如果存在多个答案,您可以返回其中 任何 一…

SSM共享充电宝系统

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 SS…

Android 常用命令和工具解析之存储相关

1 基本概念 2 命令解读 2.1 adb shell df df 命令主要用于需要检查文件系统上已使用和可用的磁盘空间的数量。如果没有指定文件名,则显示在当前所有挂载的文件系统上可用的空间。其原理是从proc/mounts 或 /etc/mtab 中检索磁盘信息。 注意:df命令并…

51单片机编程学习笔记——LED原理图

大纲 概览LED电路图Resistor Pack3位数电阻表示法VCC 在《51单片机编程学习笔记——编译代码点亮LED》一文中,我们通过下面这段代码点亮了D1和D2两个LED灯。 sbit LED1P2^0; //将P2.0管脚定义为LED1 sbit LED2P2^1; //将P2.1管脚定义为LED2 …… LED10; LED20;那么…

测试的BUG分析

在了解BUG之前,我们要先了解软件测试的生命周期,因为大多数BUG都是在软件测试的过程中被发现的 软件测试的生命周期 在了解 软件测试的生命周期 之前,我们要先了解 软件的生命周期 ,虽然他们之间只差了两个字,但是差距还是很大的 首先是 软件生命周期 ,这个是站在 软件 的角…

vue3+ts实现动态下拉选项为图标

功能&#xff1a;实现可配置项&#xff0c;下拉选项为图标&#xff0c;如图&#xff1a; 代码如下&#xff1a; <el-select v-model"BuyVolAcc" size"small" style"width: 100%" class"icon-selector"><el-option v-for&qu…

C语言(15)-------------->一维数组

这篇文章介绍的是数组的定义、创建、初始化、使用&#xff0c;在数组中输入内容并输出数组中的内容&#xff0c;并探讨了数组在内存中的存储。里面有些内容建议大家参考下面的一些文章&#xff0c;有助于加深大家对于C语言的理解&#xff1a; C语言&#xff08;2&#xff09;-…

RISCV指令集解析

参考视频&#xff1a;《RISC-V入门&进阶教程》1-4-RV32I基本指令集&#xff08;1&#xff09;_哔哩哔哩_bilibili privilege是特权指令集&#xff0c;有点系统调用的感觉&#xff0c;要走内核态。unprivilege指令集有点像普通的函数调用。