首页 > 其他分享 >RabbitMQ 笔记一

RabbitMQ 笔记一

时间:2023-09-08 17:01:28浏览次数:32  
标签:持久 ack 笔记 交换机 MQ RabbitMQ 消息

1.RabbitMQ-如何保证消息不丢失

RabbitMQ 笔记一_持久化

1.生产者确认机制

RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后,会返回一个结果给发送者,表示消息是否处理成功

RabbitMQ 笔记一_持久化_02

消息失败之后如何处理:1回调方法即时重发 2记录日志 3保存到数据库然后定时重发,成功发送后即刻删除表中的数据

2.消息持久化

MQ默认是内存存储消息,开启持久化功能可以确保缓存在MQ中的消息不丢失。

2.1 交换机持久化:

@Bean
public DirectExchange simpleExchange(){
    // 三个参数:交换机名称、是否持久化、当没有queue与其绑定时是否自动删除     return new DirectExchange("simple.direct", true, false);
}

2.2 队列持久化:

@Bean
public Queue simpleQueue(){
    // 使用QueueBuilder构建队列,durable就是持久化的
    return QueueBuilder.durable("simple.queue").build();
}

2.3 消息持久化,SpringAMQP中的的消息默认是持久的,可以通过MessageProperties中的DeliveryMode来指定:

Message msg = MessageBuilder
        .withBody(message.getBytes(StandardCharsets.UTF_8)) // 消息体        

  .setDeliveryMode(MessageDeliveryMode.PERSISTENT) // 持久化        

        .build();

3.消费者确认

RabbitMQ支持消费者确认机制,即:消费者处理消息后可以向MQ发送ack回执,MQ收到ack回执后才会删除该消息。而SpringAMQP则允许配置三种确认模式:

manual:手动ack,需要在业务代码结束后,调用api发送ack。

auto:自动ack,由spring监测listener代码是否出现异常,没有异常则返回ack;抛出异常则返回nack

none:关闭ack,MQ假定消费者获取消息后会成功处理,因此消息投递后立即被删除

我们可以利用Spring的retry机制,在消费者出现异常时利用本地重试,设置重试次数,当次数达到了以后,如果消息依然失败,将消息投递到异常交换机,交由人工处理

RabbitMQ 笔记一_重发_03

标签:持久,ack,笔记,交换机,MQ,RabbitMQ,消息
From: https://blog.51cto.com/yuanxiQAQ/7411622

相关文章

  • 计算几何训练笔记
    Luogu1452旋转卡壳,注意判一下平行的情况,另外有个比较简介的求凸包方法,就不用分别求上凸壳和下凸壳再合起来了:intis(pointa,pointb){returna.x==b.x?a.y<b.y:a.x<b.x;}#definepd(A,B,C)(cross((C-B),(B-A))>0||(cross((C-B),(B-A))==0&&is(A,B)==is(B,C)))sort(p+1,p+n+......
  • 【RabbitMQ】RabbitMQ 服务无法启动。系统出错。发生系统错误 1067。进程意外终止。
    问题描述RabbitMQ服务无法启动。rabbitmq-service.batstartRabbitMQ服务正在启动.RabbitMQ服务无法启动。系统出错。发生系统错误1067。进程意外终止。原因分析RabbitMQ和Erlang版本不匹配。解决方案查询并安装RabbitMQ版本对应Erlang版本https://www.rabbitmq.com......
  • heijin_linux驱动笔记
    驱动程序的作用:1)向linux内核注册/注销设备号,创建/删除设备节点文件(这个操作可以分离出来),供应用程序调用。(设备节点文件中的设备号要与驱动程序申请注册的设备号一致)2)将物理地址转为虚拟地址进行设备操作,将应用程序的文件调用转为对自定义的驱动函数调用;驱动的创建:配置环境变量(......
  • Windows 安装 RabbitMq
    Windows上安装RabbitMQ的步骤RabbitMQ是一个强大的开源消息队列系统,广泛用于构建分布式、可扩展的应用程序。本教程将带您一步一步完成在Windows系统上安装RabbitMQ的过程。无需担心,即使您是初学者,也能够轻松跟随这些简单的步骤来完成安装。步骤1:安装ErlangRabbitMQ是使......
  • effective c++笔记
    一.截图1. public继承,No32,Pg155 2.不重定义继承而来的缺省参数值,No37,Pg183 ......
  • azure data studio SQL扩展插件开发笔记
    node.js环境下拉取脚手架npminstall-gyogenerator-azuredatastudioyoazuredatastudio改代码运行调试扩展,在visualstudiocode中安装插件即可然后visualstudiocode打开进行修改运行即可image.png运行后自动打开auzredatastudio了,下面是我开发的扩展,......
  • vscode插件开发笔记
    https://code.visualstudio.com/api/get-started/your-first-extensionnpminstall-gyogenerator-codeyocode正常开发选择ts或者js结果如下,package.json的contributes.commands节点控制命令生命,contributes.menus定义菜单extension.ts里面注册事件exportfunctionactivat......
  • 结构化文档开发笔记
    一些浅薄的见解有错误请指出1.结构化文档编写和发布的基本流程看了一些工具的文档,发现从编写xml到输出为pdf、html的步骤是固定的,从编写XML文件到输出为PDF文档的一般流程包括以下步骤:编写XML文件:根据需要的文档结构和内容,使用XML标记语言编写XML文件。XML文件应包含所需的数......
  • Go学习笔记3
    九、错误处理1.defer+recover机制处理异常错误展示错误:发现:程序中出现错误/恐慌以后,程序被中断,无法继续执行。错误处理/捕获机制:内置函数recover:2.自定义错误需要调用errors包下的New函数:函数返回error类型3.panic有一种情况:程序出现错误以后,后续代码就没有必要执......
  • Qemu源码分析(1)—Apple的学习笔记
    一,前言开始qemu源码学习之路。从简书切换到此,真的是一键导入,太快了。二,从某个点开始分析源码Type_new函数就是把TypeInfo内容复制到TypeImpl。1.总的来说type_register_internal就是创建一个TypeImpl类,然后添加到hash表中。staticTypeImpl*type_register_internal(constTypeInfo......