RabbitMQ高级特性-Confirm确认消息

2023-10-29

Confirm确认消息

  • 消息的确认, 是指生产者投递消息后, 如果Broker收到消息, 则会给我们产生一个应答

  • 生产者进行接收应答, 用来确定这条消息是否正常发送到Broker, 这种方式也是消息的可靠性投递的核心保障
    Confirm确认消息

如何实现Confirm确认消息

  1. 在channel上开启确认模式 : channel.confirmSelect()
  2. 在channel上添加监听 : addConfirmListener, 监听成功和失败的返回结果, 根据具体的结果对消息进行重新发送, 或记录日志等后续处理

Producer代码

package com.qiyexue.confirm;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.ConfirmListener;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;


/**
 * Confirm确认消息模式生产者
 *
 * @author 七夜雪
 * @create 2018-12-15 16:12
 */
public class ProducerByConfirm {

    public static void main(String[] args) throws Exception {
        // 1. 创建ConnectionFactory, 并设置属性
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.72.138");
        factory.setPort(5672);
        factory.setVirtualHost("/");

        // 2. 创建连接
        Connection connection = factory.newConnection();

        // 3. 创建channel
        Channel channel = connection.createChannel();

        // 4. 开启Confirm模式
        channel.confirmSelect();

        String exchangeName = "test_confirm_exchange";
        String routingKey = "confirm.qiye";

        // 5. 发送消息
        String msg = "Send Msg By Confirm ...";
        channel.basicPublish(exchangeName, routingKey, null, msg.getBytes());

        // 6. 设置监听
        channel.addConfirmListener(new ConfirmListener() {
            public void handleAck(long deliveryTag, boolean multiple) throws IOException {
                System.out.println("-------ACK Success--------");
            }

            public void handleNack(long deliveryTag, boolean multiple) throws IOException {
                System.err.println("-------ACK Failed--------");
            }
        });

        // 因为设置了监听, 这里就不关闭channel和connection了
    }

}

Consumer代码

package com.qiyexue.confirm;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;

/**
 * Confirm消息确认的生产者
 *
 * @author 七夜雪
 * @create 2018-12-15 16:19
 */
public class ConsumerByConfirm {

    public static void main(String[] args) throws Exception {
        // 1. 创建连接工厂并设置属性
        ConnectionFactory factory = new ConnectionFactory();;
        factory.setHost("192.168.72.138");
        factory.setPort(5672);
        factory.setVirtualHost("/");

        // 2. 创建连接
        Connection connection = factory.newConnection();

        // 3. 创建channel
        Channel channel = connection.createChannel();

        // 4. 声明Exchange
        String exchangeName = "test_confirm_exchange";
        String exchangeType = "topic";
        String routingKey = "confirm.*";
        channel.exchangeDeclare(exchangeName, exchangeType, true, false, null);

        // 5. 声明消息队列
        String queueName = "test_confirm_queue";
        channel.queueDeclare(queueName, true, false, false, null);

        // 6. 绑定队列和Exchange
        channel.queueBind(queueName, exchangeName, routingKey);

        // 7. 创建一个消费者
        QueueingConsumer consumer = new QueueingConsumer(channel);

        // 8. 设置消费者从哪个队列开始消费, 设置自动ACK
        channel.basicConsume(queueName, true, consumer);

        while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String msg = new String(delivery.getBody());
            System.out.println(msg);
        }

    }

}

相关链接

RabbitMQ入门与AMQP协议简介
RabbitMQ成员简介
RabbitMQ高级特性-消息可靠性投递
RabbitMQ高级特性-幂等性保障
RabbitMQ高级特性-Confirm确认消息
RabbitMQ高级特性-Return消息机制
RabbitMQ高级特性-消费端自定义监听
RabbitMQ高级特性-消费端限流
RabbitMQ高级特性-消费端ACK与重回队列
RabbitMQ高级特性-TTL队列/消息
RabbitMQ高级特性-死信队列(DLX)
Spring AMQP整合RabbitMQ
SpringBoot整合RabbitMQ
RabbitMQ集群架构模式介绍
从零开始搭建高可用RabbitMQ镜像模式集群
RabbitMQ集群恢复与故障转移
RabbitMQ-基础组件封装
Git代码地址


慕课网<RabbitMQ消息中间件技术精讲>学习笔记

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RabbitMQ高级特性-Confirm确认消息 的相关文章

随机推荐

  • FreeRTOS内核配置说明---FreeRTOS Kernel V10.2.1

    FreeRTOS内核是高度可定制的 使用配置文件FreeRTOSConfig h进行定制 每个FreeRTOS应用都必须包含这个头文件 用户根据实际应用来裁剪定制FreeRTOS内核 这个配置文件是针对用户程序的 而非内核 因此配置文件一般
  • 链栈的基本操作C/C++代码实现

    链栈的结构 由于栈的主要操作是在栈顶插入和删除 显然以链表的头部作为栈顶是最方便的 且不需要附加一个头结点 初始化 栈顶指针S置空即可 入栈 链栈不需要判断栈是否满 出栈 栈顶指针S等于NULL表空栈 即链栈S NULL时为空栈 代码如下
  • C++非const引用问题:error: cannot bind non-const lvalue reference of type

    当一个函数的形参为非const类型 而一个参数以非const传入 编译器一般会认为程序员会在该函数里修改该参数 而且该参数返回后还会发挥作用 此时如果你把一个临时变量当成非const引用传进来 由于临时变量的特殊性 程序员无法对改临时变量进
  • 【壁纸小程序】搭建自己的壁纸小程序-微信抖音双端

    文章目录 前言 一 前端展示 二 实现原理简析 1 wordpress 后端 2 前端uni app 三 如何自动发布文章 安装 JWT Authentication for WP API 插件 准备好图片 使用python脚本自动发布 前
  • Netty的零拷贝(Zero-Copy)

    Netty的零拷贝 Zero Copy 主要体现在五个方面 Netty接收和发送ByteBuffer采用DirectBuffer 使用堆外直接内存进行Socket读写 不需要进行字节缓冲区的二次拷贝 如果使用传统的JVM的堆内存 Heap
  • 【强化学习】手把手教你实现游戏通关AI(2)——Q-Learning

    系列文章目录 在本系列文章中笔者将手把手带领大家实现基于强化学习的通关类小游戏 笔者将考虑多种方案 让角色顺利通关 本文将讲述如何使用Q Learning算法实现AI通关 完整代码已上传至github https github com To
  • 华为OD机试 Python 叠积木

    描述 你手里有一堆砖头 它们都有一样的宽和高 但长度不同 你想用这些砖头堆砌一堵墙 每一层墙可以只用一个砖头 也可以用两个拼接起来 但这两种情况下 每层的长度必须都是一样的 如果你想使用所有的砖头 并堆砌出尽可能多的层数 那么最多可以搭建多
  • 目标检测和分割的区别

    仅作为记录 大佬请跳过 检测是画框 分割是掩膜 检测 分割
  • 【蓄水池抽样】算法入门

    蓄水池抽样 算法知识点学习自宫水三叶大佬 记录一下 方法一 哈希表 如果不考虑数组的大小 我们可以在构造函数中 用一个哈希表 map 记录 nums 中相同元素的下标 对于pick 操作 我们可以从 map 中取出target 对应的下标列
  • linux更改环境变量语言utf8,记Centos修改语言环境变量$LANG不生效原因

    问题背景 编辑 etc locale conf 改成 LANG en US UTF 8 重启服务器后 进入系统 仍然是显示中文 排查分析 复现问题环境 确认当前系统支持 en US UTF 8 语言环境 en US utf8 和 en US
  • Centos 7 设置CA根证书

    root vpn mkdir csk rootca root vpn csk rootca cp a etc pki CA certs certs存放已颁发的证书 root vpn csk rootca cp a etc pki CA ne
  • DOS网络启动盘

    DOS网络启动盘 这张从97年到现在我一直保留并维护的工具盘 也许平时用的机会不多 但总在关键时刻救急 它能帮你在无法通过光驱安装操作系统时 通过网络或USB移动盘把几百兆的Windows系统安装文件复制到本地硬盘来进行安装 当然还可以用它
  • 解决安装visual studio installer 报错,无法下载安装文件的问题

    文章目录 解决安装visual studio installer 报错 无法下载安装文件的问题 Visual Studio 2019下载官网 一 VS2019安装问题 问题 解决方法1 解决方法2 解决方法3 解决方法4 解决方法5 解决方
  • 设计模式(四)单例和简单工厂的融合

    前面三篇文章介绍了三种模式 单例 简单工厂和工厂方法 其中 简单工厂和工厂方法都是基于同一个实际问题 但是 这个例子里有几个问题 1 职工的创建在main函数中 不合理 可能多个函数都会需要访问职工信息 2 职工是程序直接创建的 不合理 一
  • Unity 第一期

    1 让一个物体围绕某一点旋转 有几种方法 分别是什么 旋转函数transform Rotate 来实现 transform的RotateAround vector3 postion vector3 axis float angle 函数 J
  • vad算法 c语言,腾讯视频cKey算法

    接口地址 https vd l qq com proxyhttp 接口参数示例 buid vinfoad adparam pf in ad type LD KB PVL pf ex pc url https v qq com x cover
  • python语言基本控制结构程序异常_Python学习笔记整理(十七)异常处理

    一 异常基础 try except 捕捉由代码中的异常并恢复 匹配except里面的错误 并自行except中定义的代码 后继续执行程序 发生异常后 由except捕捉到异常后 不会中断程序 继续执行try语句后面的程序 try final
  • spark高级数据分析系列之第三章音乐推荐和 Audioscrobbler 数据集

    3 1数据集和整体思路 数据集 本章实现的是歌曲推荐 使用的是ALS算法 ALS是spark mllib中唯一的推荐算法 因为只有ALS算法可以进行并行运算 使用数据集在这里 里面包含该三个文件 表一 user artist data tx
  • Basic Level 1017 A除以B (20分)

    题目 本题要求计算 A B A B A B 其中 A A A是不超过1000位的正整数
  • RabbitMQ高级特性-Confirm确认消息

    Confirm确认消息 消息的确认 是指生产者投递消息后 如果Broker收到消息 则会给我们产生一个应答 生产者进行接收应答 用来确定这条消息是否正常发送到Broker 这种方式也是消息的可靠性投递的核心保障 如何实现Confirm确认消