RabbitMQ(四)事务消息,惰性队列,优先队列

文章目录

  • 事务消息
    • 概念
    • 配置
  • 惰性队列
    • 概念
    • 应用场景
  • 优先队列
    • 概念
    • 配置

事务消息

仅在生产者端有效消费端无效

概念

在这里插入图片描述

总结:

  • 在生产者端使用事务消息和消费端没有关系
  • 在生产者端使用事务消息仅仅是控制事务内的消息是否发送
  • 提交事务就把事务内所有消息都发送到交换机
  • 回滚事务则事务内任何消息都不会被发送

配置

// 配置
import lombok.Data;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.transaction.RabbitTransactionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@Data
public class RabbitConfig {

    @Bean
    public RabbitTransactionManager transactionManager(CachingConnectionFactory connectionFactory) {
        return new RabbitTransactionManager(connectionFactory);
    }

    @Bean
    public RabbitTemplate rabbitTemplate(CachingConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setChannelTransacted(true);
        return rabbitTemplate;
    }
}
//测试

@SpringBootTest
@Slf4j
public class RabbitMQTest {

    public static final String EXCHANGE_NAME = "exchange.tx.dragon";
    public static final String ROUTING_KEY = "routing.key.tx.dragon";

    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    @Transactional
    @Rollback(value = true) // junit 默认回滚事务,所以想提交事务就设置为 false
    public void testSendMessageInTx() {
        // 1、发送第一条消息
        rabbitTemplate.convertAndSend(EXCHANGE_NAME, ROUTING_KEY, "I am a dragon(tx msg ~~~01~~~)");

        // 2、抛出异常
        log.info("do bad:" + 10 / 0);

        // 3、发送第二条消息
        rabbitTemplate.convertAndSend(EXCHANGE_NAME, ROUTING_KEY, "I am a dragon(tx msg ~~~02~~~)");
    }

}

惰性队列

概念

创建队列时,在Durability这里有两个选项可以选择

  • Durable:持久化队列,消息会持久化到硬盘上
  • Transient:临时队列,不做持久化操作,broker重启后消息会丢失
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    https://www.rabbitmq.com/docs/lazy-queues

经典队列中的消息会尽可能早地移动到磁盘。 只有当使用者请求这些消息时,它们才会加载到 RAM 中

在这里插入图片描述
会从硬盘中读取,只能作为权宜之计

应用场景

在这里插入图片描述
在这里插入图片描述

优先队列

概念

默认情况:基于队列先进先出的特性,通常来说,先入队的先投递

  • 设置优先级之后:优先级高的消息更大几率先投递
  • 关键参数:x-max-priority

RabbitMQ允许我们使用一个正整数给消息设定优先级

  • 消息的优先级数值取值范围:1~255
  • RabbitMQ官网建议在1~5之间设置消息的优先级(优先级越高,占用CPU、
    内存等资源越多)

队列在声明时可以指定参数:x-max-priority

  • 默认值:0 此时消息即使设置优先级也无效
  • 指定一个正整数值:消息的优先级数值不能超过这个值

配置

配置exchange:exchange.test.priority
在这里插入图片描述
配置队列:queue.test.priority
x-max-priority
在这里插入图片描述

// 生产者:发三个从1开始,优先级越大消费的时候越在前面消费
// 下面是发一条消息的示例

public static final String EXCHANGE_PRIORITY = "exchange.test.priority";
public static final String ROUTING_KEY_PRIORITY = "routing.key.test.priority";
@Test
public void test06SendMessage() {
    rabbitTemplate.convertAndSend(EXCHANGE_PRIORITY, ROUTING_KEY_PRIORITY, "message test proirity 3", message -> {

        // 消息本身的优先级数值
        // 切记:不能超过 x-max-priority:	10
        message.getMessageProperties().setPriority(3);

        return message;
    });
}
// 消费者
@Component
@Slf4j
public class MyMessageListener {

    public static final String QUEUE_PRIORITY = "queue.test.priority";
	@RabbitListener(queues = {QUEUE_PRIORITY})
    public void processMessagePriority(String dataString, Message message, Channel channel) throws IOException {
        log.info("[priority]" + dataString);
        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
    }
}

在这里插入图片描述

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

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

相关文章

echarts学习:基本使用和组件封装

前言 我在工作中使用echarts较少,这就导致每次使用时都要从头再来,这让我很头疼。因此我决心编写一系列文章将我参与工作后几次使用echarts所用到的知识记录下来,以便将来可以快速查阅。 一、基本使用 像我一样的新手,想要入门e…

【设计模式】JAVA Design Patterns——Iterator(迭代器模式)

🔍目的 提供一种在不暴露其基础表示的情况下顺序访问聚合对象的元素的方法。 🔍解释 真实世界例子 百宝箱包含一组魔法物品。有多种物品,例如戒指,药水和武器。可以使用藏宝箱提供的迭代器按类型浏览商品。 通俗描述 容器可以提供…

d3dcompiler43.dll丢失怎么修复,分享几种有效的修复教程

电脑已经成为我们生活中不可或缺的一部分。然而,由于各种原因,电脑可能会出现一些问题,其中之一就是d3dcompiler43.dll文件丢失。这个文件是DirectX组件之一,用于编译和链接DirectX应用程序。当这个文件丢失时,可能会导…

Chapter 5 Current Mirrors and Biasing Techniques

Chapter 5 Current Mirrors and Biasing Techniques 这一章介绍电流镜 5.1 Basic Current Mirrors MOS工作在饱和区, 表现为一个电流源. 考虑电源变化, PVT波动, 我们会首先产生一路精准电流源, 再复制这路电流. 如何复制呢? 电流转电压再转电流就行了, 如下图所示 考虑到…

SpringBoot+VUE(选课)课堂管理系统

免费获取方式↓↓↓ 项目介绍035: 项目名:课堂管理系统 技术栈:SpringBootVue 网址:http://localhost:8081/ 学生 1 密码 1 教师 20190101 密码 zsf 功能: 首页 课程服务 学生服务 选课 我的选课 教师服务 我的授课 笔记 签到 聊天室 二、技术栈 所有场景都支持 适…

wampserver的使用

wampserver的使用 文章目录 wampserver的使用1.启动2.目录3.基本操作 1.启动 WampServler有三种状态 服务器关闭状态,颜色为红色服务器开启,但是为离线状态,颜色为橙色,只有本机可以访问服务器开启,在线状态&#xf…

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

最近专栏来了很多的新手小白,对科研实验的过程感到困惑和无从下手,这篇文章就来讲解一下整体的科研流程,从选择数据集到发表论文的各个步骤,并针对大家在实验中常犯的错误进行解答。并且为大家提供通向我其他相关博客的指引&#…

远程服务器上,再次配笔记1、2、11、12相同的深度学习和gcc环境

文章目录 参考文献 创建环境在(zgp_m3dm)中安装会显示zgp_m3dm_main环境中的情况满足(base) ~/zgp/M3DM-repetition conda deactivate 再次安装如果服务器本身不能联网,需下载pysocks包以设置反向代理(具体可参考之前的笔记10): 再…

乡村振兴与乡村旅游品牌化:打造具有地方特色的乡村旅游品牌,提升乡村旅游吸引力,促进美丽乡村建设

目录 一、引言 二、乡村旅游品牌化的重要性 (一)增强乡村旅游的辨识度 (二)提升乡村旅游的附加值 (三)促进乡村文化的传承与创新 三、打造具有地方特色的乡村旅游品牌 (一)明…

vs - 在win10中安装vs2013update5

文章目录 vs - 在win10中安装vs2013update5概述笔记直接安装vs2013-update5报错先安装vs2013原版安装 vs2013 update5测试备注END vs - 在win10中安装vs2013update5 概述 用VS2019写的程序,在早期windows(e.g. win7, win8.1)上安装时,需要UCRT。 UCRT是…

kali-搭建Pikachu漏洞练习平台

环境:kali 压缩包:pikachu-master.zip (下载地址:GitHub - zhuifengshaonianhanlu/pikachu: 一个好玩的Web安全-漏洞测试平台) 1.mysql 1.开启kali中自带的mysql systemctl restart mysql #重启MySQL服务 systemc…

Linux下的配置工具menuconfig+配置文件(Kconfig/.config/defconfig)

我们都知道,嵌入式开发中,或者说C语言中,配置基本都是通过宏定义来决定的,在MCU开发中,代码量比较小,配置项也比较少,我们直接修改对应的宏定义即可。 但是,Linux开发中,操作系统、驱动部分还有应用部分加起来,代码量极大,配置项目也非常多,这时候,就需要对这些配…

Amazon云计算AWS(三)

目录 五、关系数据库服务RDS(一)RDS的基本原理(二)RDS的使用 六、简单队列服务SQS(一)SQS的基本模型(二)SQS的消息 七、内容推送服务CloudFront(一)CDN&#…

公告:公众号铁粉粉丝介绍以及说明

大家好,我是公众号博主--夏目 机械电气电机杂谈是我个人建立,为分享机械,电气,电机知识为主,闲谈杂聊社会时事,职场见闻,生活琐事,成长趣事,学习心得,读书观影…

Java面试——专业技能

优质博文:IT-BLOG-CN 一、简单讲下 Java 的跨平台原理 由于各个操作系统(Windows,Linux等)支持的指令集不是完全一致的。就会让我们程序在不同的操作系统上要执行不同的程序代码。Java 开发了适用于不同操作系统及位数的 Java 虚拟…

linux系统——计算机网络协议,ifconfig命令

在linux系统中,可以在指定文件查看网卡名,进而使用ifconfig网卡名查询相应网络信息

Golang | Leetcode Golang题解之第113题路径总和II

题目: 题解: type pair struct {node *TreeNodeleft int }func pathSum(root *TreeNode, targetSum int) (ans [][]int) {if root nil {return}parent : map[*TreeNode]*TreeNode{}getPath : func(node *TreeNode) (path []int) {for ; node ! nil; no…

实操:serverless-step-functions-local

目录 问题 依赖组件 调用流程 代码设置 1、安装依赖插件: 2、serverless.yml配置,我这里只提供stepfunction依赖的配置 3、业务代码中使用本地stepdunction 4、启动serverless offline 5、docker 安装启动stepfunction ⚠️注意 1、docker访问…

2006NOIP普及组真题 4. 数列

线上OJ: 【06NOIP普及组】数列 思考: 这道题大概率是一道可以使用“瞪眼法”找到规律的题目。我们尝试把数据补充的更多,以便于寻找规律 当 k3 时,k的幂次为1, 3, 9, 27, 81… 从上述推理中,我们发现要输出的幂次和中…

MES系统的功能、架构及应用价值

MES系统生产过程控制的主要方面涵盖了生产计划与控制、生产调度与排程、数据采集与监控、质量控制与管理、物料管理与控制以及设备管理与维护等多个方面。这些功能共同构成了MES系统的核心价值,帮助企业实现生产过程的数字化、智能化和精细化管理。 一、工厂使用MES…