热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RabbitMQ学习_RabbitMQ学习笔记5:RabbitMQ高级

篇首语:本文由编程笔记#小编为大家整理,主要介绍了RabbitMQ学习笔记5:RabbitMQ高级相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了RabbitMQ学习笔记5:RabbitMQ高级相关的知识,希望对你有一定的参考价值。






一、TTL队列过期时间

1.过期时间TTL是什么?

过期时间TTL表示可以对消息设置预期的时间,在这个时间内都可以被消费者接收获取;过了之后消息将自动被删除。


2.RabbitMQ可以对消息和队列设置TTL,目前有两种方法可以设置:


  1. 第一种方法是通过队列属性设置,队列中所有消息都有相同的过期时间。
  2. 第二种方法是对消息进行单独设置,每条消息TTL可以不同。

如果上述两种方法同时使用,则消息的过期时间以两者之间TTL较小的那个数值为准。消息在队列的生存时间一旦超过设置的TTL值,就称为dead message被投递到死信队列,消费者将无法再收到该消息。


二、死信队列

DLX.全称为Dead-Letter-Exchange,可以称之为死信交换机,也有人称之为死信邮箱。当消息在一个队列中变成死信(dead message)之后,它能被里新发送到另一个交换机中,这个交换机就是DLX,绑定DLX的队列就称之为死信队列。
消息变成死信,可能是由于以下的原因:


  1. 消息被拒绝
  2. 消息过期
  3. 队列达到最大长度

  • DLX也是一个正常的交换机,和一般的交换机没有区别,它能在任何的队列上被指定,实际上就是设置某一个队列的属性。当这个队列中存在死信时, Rabbitmq就会自动地将这个消息里新发布到设置的DLX上去,进而被路由到另一个队列,即死信队列。
  • 要想使用死信队列,只需要在定义队列的时候设置队列参数 x-dead-letter-exchange 指定交换机即可。

三、延迟队列

有时候不想让消费者立马拿到消息消费,就涉及到延迟队列的使用,使用场景比如典型的付款,提交订单以后,用户如果迟迟没有支付,设置一个过期时间半小时,半小时后进入死信队列进行处理,由系统自动取消订单,所以延迟队列的实现可以使用消息过期+死信队列的方式来实现。


四、内存磁盘监控

当内存使用超过配置的阈值或者磁盘空间剩余空间对于配置的阈值时,RabbitMQ会暂时阻塞客户端的连接,并且停止接收从客户端发来的消息,以此避免服务器的崩溃,客户端与服务端的心态检测机制也会失效。


监控方式:


  1. 内存警告
  2. 内存控制(使用命令的方式 或 配置文件的方式)
  3. 内存换页(在某个Broker节点及内存阻塞生产者之前,它会尝试将队列中的消息换页到磁盘以释放内存空间,持久化和非持久化的消息都会写入磁盘中,其中持久化的消息本身就在磁盘中有一个副本,所以在转移的过程中持久化的消息会先从内存中清除掉。)
  4. 磁盘预警(当磁盘的剩余空间低于确定的词值时,RabbitMQ同样 会阻塞生产者,这样可以避免因非持久化的消息持续换页而耗尽磁盘空间导致服务器崩溃。)

五 、RabbitMQ集群

RabbitMQ这款消息队列中间件产品本身是基于Erlang编写, Erlang语言天生具备分布式特性(通过同步Erlang 群名节点的magic COOKIE来实现) 。因此, RabbitMQ天然支持Clustering,这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过ZooKeeper分别来实现HA方案和保存集群的元数据。

集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞吐是能力的目的。在实际使用过程中多采取多机多实例部署方式


集群搭建:


  1. 启动第一个节点 rabbit-1;
  2. 启动第二个节点 rabbit-2;
  3. 验证启动 “ps aux|grep rabbitmq”;
  4. rabbit-1作为主节点;
  5. rabbit-2作为从节点;
  6. 验证集群状态;
  7. Web监控。

注意:主节点关闭后从节点无法访问,从节点关闭主节点依然存在。


六、基于MQ的分布式事务

1.在不同系统间如何保存数据一致性的解决方案就是分布式事务所做的事情。


  • 分布式事务指事务的操作位于不同的节点上,需要保证事务的AICD特性。

  1. 原子性:是指事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。

  2. 一致性:是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。

  3. 隔离性:多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。

  4. 持久性:这是最好理解的一个特性:持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。(完成的事务是系统永久的部分,对系统的影响是永久性的,该修改即使出现致命的系统故障也将一直保持)


  • 例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务

2.解决方案


  • 2PC 两阶段提交
  • TCC 补偿事务
  • 本地消息表(异步确保)
  • MQ事务消息(异步场景,通用性较强)

3.基于MQ的分布式事务整体设计思路


4.基于MQ的分布式事务消息问题


  1. 可靠生产和推送确认
  2. 可靠消费
  3. 可靠消费重试机制
  4. 可靠消费死信队列

5.基于MQ分布式事务解决方案优缺点

优点:
1、通用性强
2、拓展方便
3、耦合度低,方案也比较成熟
缺点:
1、基于消息中间件,只适合异步场景
2、消息会延迟处理,需要业务上能够容忍
建议
1、尽量去避免分布式事务
2、尽量将非核心业务做成异步
 




推荐阅读
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 本文深入探讨了ASP.NET中ViewState、Cookie和Session三种状态管理技术的区别与应用场景。ViewState主要用于保存页面控件的状态信息,确保在多次往返服务器过程中数据的一致性;Cookie则存储在客户端,适用于保存少量用户偏好设置等非敏感信息;而Session则在服务器端存储数据,适合处理需要跨页面保持的数据。文章详细分析了这三种技术的工作原理及其优缺点,并提供了实际应用中的最佳实践建议。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • DHCP三层交换机设置方式全局模式和接口模式设置方式和命令resetsave回车输入yreboot输入n输入y重启后就恢复默认设置了默认用户名密码adminAdmin@huawei ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • # 运维小白的成长日记第七天OSI七层传输层/应用层精讲!
    运维小白的成长日记第七天-OSI七层传输层应用层精讲!1、IP提供了点到点的连续接,通过IP地址可以找到目标主机。但是目标主机有很多应用,服务器到底使用哪个应用来响应客户端?通过端 ... [详细]
  • 导读:今天编程笔记来给各位分享关于php技术员是什么的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
author-avatar
啊沙发的非飞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有