第9章 RabbitMQ高阶

Centos7.9 安装 rabbitMq 公司搭建测试环境使用到rabbitmq,在安装过程照参照了很多网上的例子,但都有各种各样的问题,折腾两天后终于搞定了,本文就是记录此次安装的过程。纸上得来终觉浅,绝知此事要躬行。httpshttpshttpshttps。... 阅读详情

第9章 RabbitMQ高阶

默认情况下,在内存到达内存阈值的50%时会进行换页动作。也就是说,在默认的内存阈值为0.4的情况下,当内存超过0.4*0.5=0.2时会进行换页动作。可以通过在配置文件中配置vm_memory_high_watermark_paging_ratio项来修改此值。

9.2.2 磁盘告警

当剩余磁盘空间低于确定的阈值时,RabbitMQ同样会阻塞生产者,这样可以避免因非持久化的消息持续换页而耗尽磁盘空间导致服务崩溃。默认情况下,磁盘阈值为50MB,这意味着当磁盘剩余空间低于50MB时会阻塞生产者并停止内存中消息的换页动作。这个阈值的设置可以减小但不能完全消除因磁盘耗尽而导致崩溃的可能性,比如在两次磁盘空间检测期间内,磁盘空间从大于50MB被耗尽到0MB。一个相对谨慎的做法是将磁盘阈值设置为与操作系统所显示的内存大小一致。

RabbitMQ会定期检测磁盘剩余空间,检测的频率与上一次执行检测到的磁盘剩余空间大小有关。正常情况下,每10秒执行一次检测,随着磁盘剩余空间与磁盘阈值的接近,检测频率会有所增加。当要到达磁盘阈值时,检测频率为每秒10次,这样有可能会增加系统的负载。

可以通过在配置文件中配置disk_free_limit项来设置磁盘阈值。

mem_relative可以参考机器内存的大小为磁盘阈值设置一个相对的比值。

9.3 流控

内存和磁盘告警相当于全局的流控(Global Flow Control),一旦触发会阻塞集群中所有的Connection,而流控时针对单个Connection的,可以称之为Per-Connection Flow Control 或者 Internal Flow Control。

9.3.1 流控的原理

Erlang进程之间并不共享内存(binary类型的除外),而是通过消息传递通信,每个进程都有自己的进程邮箱(mailbox)。默认情况下,Erlang并没有对进程邮箱的大小进行限制,所以当有大量消息持续发往某个进程时,会导致该进程邮箱过大,最终内存溢出并崩溃。在RabbitMQ中,如果生产者持续高速发送,而消费者消费速度较低时,如果没有流控,很快就会使内部进程邮箱的大小达到内存阈值。

RabbitMQ使用了一种基于信用证算法(credit-based algorithm)的流控机制来限制发送消息的速率以解决前面所提出的问题。

处于flow状态的Connection和处于running状态的Connection并没有什么不同,这个状态只是告诉系统管理员相应的发送速率受限了。

流控机制不只是作用于Connection,同样作用于信道(Channel)和队列。从Connection到Channel,再到队列,最后时消息持久化存储形成一个完整的流控链,对于处于整个流控链中的任意进程,只要该进程阻塞,上游的进程必定全部被阻塞。也就是说,如果某个进程达到性能瓶颈,必然会导致上游所有的进程被阻塞。所以我们可以利用流控机制的这个特点找出瓶颈之所在。处理消息的几个关键进程及其对应的顺序关系如图9-6所示。

图9-6 流控链

其中的各个进程如下所述。 

rabbit_reader:

rabbit_channel:

rabbit_amqqueue_process:

rabbit_msg_store:

9.3.2 案例:打破队列的瓶颈

图9-6中描绘了一条消息从接收到存储的一个必需流控链。一般情况下,向一个队列里推送消息时,往往会在rabbit_amqqueue_process中(即队列进程中)产生性能瓶颈。在向一个队列中快速发送消息的时候,Connection和Channel都会处于flow状态,而队列处于running状态,可以分析得出在队列进程中产生性能瓶颈的结论。

这就引入了本节所要解决的问题:如何提升队列的性能?一般可以有两种解决方案:第一种是开启Erlang语言的HiPE功能,这样保守估计可以提高30%~40%的性能,不过在较旧版本的Erlang中,这个功能不太稳定,建议使用较新版本的Erlang,版本至少是18.x。第二种是寻求打破rabbit_amqqueue_process的性能瓶颈。这里的打破是指以多个rabbit_amqqueue_process替换单个rabbit_amqqueue_process,这样可以充分利用上rabbit_reader或者rabbit_channel进程中被流控的性能。

图9-7 利用多个rabbit_amqqueue_process 替换单个 rabbit_amqqueue_process

 

这里所要做的一件事就是封装。将交换器、队列、绑定关系、生产和消费的方法全部进行封装,这样对于应用来说好比在操作一个(逻辑)队列。 

9.4 镜像队列

引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他Broker节点之上,如果集群中的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。在通常的用法中,针对每一个配置镜像的队列(以下简称镜像队列)都包含一个主节点(master)和若干个从节点(slave),相应的结构可以参考图9-11。

图9-11 主从结构

 

slave会准确地按照master执行命令的顺序进行动作,故slave与master上维护的状态应该是相同的。如果master由于某种原因失效,那么“资历最老”的slave会被提升为新的master。根据slave加入的时间排序,时间最长的slave即为“资历最老”。发送到镜像队列的所有消息会被同时发往master和所有的slave上,如果此时master挂掉了,消息还会在slave上,这样slave提升为master的时候消息也不会丢失。除发送消息(Basic.Publish)外的所有动作都只会向master发送,然后再由master将命令执行的结果广播给各个slave。

如果消费者与slave建立连接并进行订阅消费,其实质上都是从master上获取消息,只不过看似从slave上消费而已。比如消费者与slave建立了TCP连接之后执行一个Basic.Get的操作,那么首先是由slave将Basic.Get请求发送master,再由master准备好数据返回给slave,最后由slave投递给消费者。读者可能会有疑问,大多的读写压力都落到了master上,那么这样是否负载会做不到有效的均衡?或者说是否可以向MySQL一样能够实现master写而slave读呢?注意这里的master和slave是针对队列而言的,而队列可以均匀地散落在集群的各个Broker节点中以达到负载均衡的目的,因为真正的负载还是针对实际的物理机器而言的,而不是内存中驻留的队列进程。

在图9-12中,集群中的每个Broker节点都包含1个队列的master和2个队列的slave,Q1的负载大多都集中在broker1上,Q2的负载大多都是集中在broker2上,Q3的负载大多都集中在broker3上,只要确保队列的master节点均匀散落在集群中的各个Broker节点即可确保很大程度上的负载均衡(每个队列的流量会有不同,因此均匀散落各个队列的master也无法确保绝对的负载均衡)。

图9-12 集群结构

 

注意要点:

RabbitMQ的镜像队列同时支持publisher confirm和事务两种机制。在事务机制中,只有当前事务在全部镜像中执行之后,客户端才会收到Tx.Commit-Ok的消息。同样的,在publisher confirm 机制中,生产者进行当前消息确认的前提是该消息被全部镜像所接收了。

不同于普通的非镜像(参考图9-2),镜像队列的backing_queue比较特殊,其实现并非是rabbit_variable_queue,它内部包裹了普通backing_queue进行本地消息消息持久化处理,在此基础上增加了将消息和ack复制到所有镜像的功能。镜像队列的结构可以参考图9-13,master的backing_queue采用的是rabbit_mirror_queue_master,而slave的backing_queue实现是rabbit_mirror_queue_slave。

图9-13 镜像队列的结构

 

所有对rabbit_mirror_queue_master的操作都会通过组播GM(Guaranteed Multicast)的方式同步到各个slave中。GM负责消息的广播,rabbit_mirror_queue_slave负责回调处理,而master上的回调处理是由coordinator负责完成的。如前所述,除了Basic.Publish,所有的操作都是通过master来完成的,master对消息进行处理的同时将消息的处理通过GM广播给所有的slave,slave的GM收到消息后,通过回调交由rabbit_mirror_queue_slave进行实际的处理。

GM模块实现的是一种可靠的组播通信协议,该协议能够保证组播消息的原子性,即保证组中活着的节点要么都收到消息要么都收不到,它的实现大致为:将所有的节点形成一个循环链表,每个节点都会监控位于自己左右两边的节点,当有节点新增时,相邻的节点保证当前广播的消息会复制到新的节点上;当有节点失效时,相邻的节点会接管以保证本次广播的消息会复制到所有的节点。在master和slave上的这些GM形成一个组(gm_group),这个组的信息会记录在Mnesia中。不同的镜像队列形成不同的组。操作命令从master对应的GM发出后,顺着链表传送到所有的节点。由于所有节点组成了一个循环链表,master对应的GM最终会收到自己发送的操作命令,这个时候master就知道该操作命令都同步到了所有的slave上。

新节点的加入过程可以参考图9-14,整个过程就像在链表中间插入一个节点。注意每当一个节点加入或者重新加入到这个镜像链路中时,之前队列保存的内容会被全部清空。

图 9-14 新节点的加入过程

当slave挂掉之后,除了与slave相连的客户端连接全部断开,没有其他影响。当master挂掉之后,会有以下连锁反应:

(1)与master连接的客户端连接全部断开。

(2)选举最老的slave作为新的master,因为最老的slave与旧的master之间的同步状态应该是最好的。如果此时所有slave处于未同步状态,则未同步的消息会丢失。

(3)新的master重新入队所有unack的消息,因为新的master无法区分这些unack的消息是否已经到达客户端,或者是ack信息丢失在老的master链路上,再或者是丢失在老的master组播ack消息到所有slave的链路上,所以出于消息可靠性的考虑,重新入队所有unack的消息,不过此时客户端可能会有重复消息。

(4)如果客户端连接着slave,并且Basic.Consume消费时制定了x-cancel-on-ha-failover参数,那么断开之时客户端会收到一个Consumer Cancellation Notification的通知,消费者客户端中会回调Consumer接口的handleCancel方法。如果未指定x-cancel-on-ha-failover参数,那么消费者将无法感知master宕机。

x-cancel-on-ha-failover参数的使用示例如下:

Map<String, Object> args = new HashMap<String, Object>();
args.put("x-cancel-on-ha-failover", true);
channel.basicConsume("queue.name", false, args, consumer);

镜像队列的配置主要是通过添加相应的Policy来完成的,对于添加Policy的细节可以参考6.3节。 这里需要详细介绍的是 rabbitmqctl set_policy [-p vhost] [--priority priority] [--apply-to apply-to] {name} {pattern} {definition} 命令中的definition部分,对于镜像队列的配置来说,definition中需要包含3个部分:ha-mode、ha-params和ha-sync-mode。

ha-mode:指明镜像队列的模式,有效值为all、exactly、nodes,默认为all。all表示在集群中所有的节点上进行镜像;exactly表示在指定个数的节点上进行镜像,节点个数由ha-params指定;nodes表示在指定节点上进行镜像,节点名称通过ha-params指定,节点的名称通常类似于rabbit@hostname,可以通过rabbitmqctl cluster_status命令查看到。

ha-params:不同的ha-mode配置中需要用到的参数。

ha-sync-mode:队列中消息的同步方式,有效值为automatic和manual。

举个例子,对队列名称以“queue_”开头的所有队列进行镜像,并在集群的两个节点上完成镜像,Policy的设置命令为:

rabbimqctl set_policy --priority 0 --apply-to queues mirror_queue "^queue_" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

ha-mode参数对排他(exclusive)队列并不生效,因为排他队列是连接独占的,当连接断开时队列会自动删除,所以实际上这个参数对排他队列没有任何意义。

将新节点加入已存在的镜像队列时,默认情况下ha-sync-mode取值为manual,镜像队列中的消息不会主动同步到新的slave中,除非显示调用同步命令。当调用同步命令后,队列开始阻塞,无法对其进行其他操作,直到同步完成。

当ha-sync-mode设置为automatic时,新加入的slave会默认同步已知的镜像队列。由于同步过程的限制,所有不建议对生产环境中正在使用的队列进行操作。使用rabbitmqctl list_queues {name} slave_pids synchronised_slave_pids命令可以查看哪些slaves已经完成同步。通过手动方式同步一个队列的命令为rabbitmqctl sync_queue {name},同样也可以取消某个队列的同步操作:rabbitmqctl cancel_sync_queue {name}。

当所有slave都出现未同步状态,并且ha-promote-on-shutdown设置为when-synced(默认)时,如果master因为主动原因停掉,比如通过rabbitmqctl stop命令或者优雅关闭操作系统,那么slave不会接管master,也就是此时镜像队列不可用;但是如果master因为被动原因停掉,比如Erlang虚拟机或者操作系统崩溃,那么slave会接管master。这个配置项隐含的价值取向时保证消息可靠不丢失,同时放弃了可用性。如果ha-promote-on-shutdown设置为always,那么不论master因为何种原因停止,slave都会接管master,优先保证可用性,不过消息可能会丢失。

镜像队列中最后一个停止的节点会是master,启动顺序必须时master先启动。如果slave先启动,它会有30秒的等待时间,等待master的启动,然后加入到集群中。如果30秒内master没有启动,slave会自动停止。当所有节点因故(断电等)同时离线时,每个节点都认为自己不是最后一个停止的节点,要恢复镜像队列,可以尝试在30秒内启动所有节点。

9.4.1 配置镜像队列

  1. 服务器CentOS 7.4
  2. 配置登录账号
    1. 添加新用户

      rabbitmqctl add_user root root

       

    2. 设置权限

      rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

       

    3. 设置角色

      rabbitmqctl set_user_tags root administrator

       

  3. 配置RabbitMQ-node1环境(Erlang RabbitMQ) 
    1. 下载Erlang
      curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash

       

    2. 安装Erlang
      [www@RabbitMQ-Node1 ~]$ sudo yum -y install erlang

       

    3. 下载RabbitMQ
      curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

       

    4. 安装RabbitMQ
      [www@RabbitMQ-Node1 ~]$ sudo yum -y install rabbitmq-server

       

    5. 后台启动RabbitMQ
      [www@RabbitMQ-Node1 ~]$ sudo rabbitmq-server -detached

       

  4. 配置RabbitMQ-node2环境(Erlang RabbitMQ) 
    1. 下载Erlang
    2. 安装Erlang
    3. 下载RabbitMQ
    4. 安装RabbitMQ
    5. 配置节点名称
    6. 后台启动RabbitMQ
  5. 配置集群
    1. 各个节点互相识别(/etc/hosts???)
    2. 确保各个节点的cookie一致(/var/lib/rabbitmq/.erlang.cookie)
    3. 加入集群(join_cluster)
  6. 配置镜像队列
    rabbitmqctl  set_policy  queue.test.mirror  "^queue.test.mirror"  '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
    
    rabbitmqctl  set_policy  queue.test.mirror  "^queue.test.mirror"  '{"ha-mode":"all","ha-sync-mode":"automatic"}'

     

  7. Federation
  8. Shovel
  9. 啦啦啦

 

 

 

 

 

【Docker】之安装 RabbitMQ 1、下载 RabbitMQ 镜像 下载最新版本的镜像: docker pull rabbitmq 更多版本的镜像可以访问 Docker 官网:https://hub.docker.com/_/rabbitmq?tab=tags 2、创建并运行 RabbitMQ 容器 启动命令: docker run -d -p 15672:15672 -p 5672:5672 \ -e RABBITMQ_DEFAULT_VHOST=my_vhost \ -e RABBITMQ_DEFAULT_USER=adm 阅读详情

相关推荐

Linux Centos8.5下安装RabbitMQ3.8.9

一,前言        因为RabbitMQ是通过Erlang语言编写的,所以在安装RabbitMQ前,需要先安装Erlang。但是在搭建RabbitMQ环境过程中,会因为RabbitMQ 和 Erlang的版本不兼容的问题导致环境无法正常使用。所以在安装RabbitMQ时,需要确认好对应的Erland版本,具体对应版本可查看文档 本次安装采用RabbitMQ版本为3.8.9,Erlang版本为23.1, 二,下载RabbtiMQ需要的安

Zheng.Zeng的博客 2034

这可能是一份最完整的 RabbitMQ 总结!

点击蓝色“架构文摘”关注我哟加个“星标”,每天上午 09:25,干货推送!- 前言 -RabbitMQ 是基于 AMQP 协议的,通过使用通用协议就可以做到在不同语言之间传...

架构文摘 259

【胡学长 带你学 Global Mapper 】如何将影像地图转换为国家2000坐标系

多部门联合开展工作坐标数据不匹配怎么办?Hi,我是胡学长!今天教大家如何利用Global Mapper将谷歌影像数据转换为国家2000坐标系影像数据 。

一起来交流学习吧 1万+

RabbitMQ高级篇,进阶内容

本篇博客主要MQ进阶内容,包括发送者的可靠性、MQ的可靠性、消费者的可靠性、延迟消息等,最后包括取消超时订单案例。

qq_43751200的博客 1092

【Docker】掌握 Docker魔法:Windows 11 平台上的完美容器部署终极指南

【Docker】掌握 Docker魔法:Windows 11 平台上的完美容器部署终极指南 一文搞懂什么是 Docker?分析容器的工作原理、容器的架构、Docker的优势、使用 Docker的原因。 全程手把手教你Docker的安装与使用,配置阿里云镜像加速、容器常用命令!

寸铁的博客 10万+

从叶片之舞到数据之眼:净空雷达如何重塑风电安全与效率的边界

净空雷达通过激光或毫米波技术实现风机叶片与塔筒间距离的毫米级实时监测,极大提升了风电场在极端天气下的安全性与运营效率。这项技术不仅预防扫塔事故,还通过数据可视化与智能分析赋能叶片健康管理和发电优化,成为风电数字化运维的核心基础设施。

xk7n92h3p5m的博客 1159

RabbitMQ 教程 | 第9章 RabbitMQ 高阶

这篇 RabbitMQ 教程为学习者提供了全面的内容,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

编程洪同学 301

手把手教你用Apple Developer App完成苹果开发者账号注册(含证件验证失败解决方案)

本文详细指导如何通过Apple Developer App完成苹果开发者账号注册,特别针对证件验证失败问题提供解决方案。从准备工作到注册流程,再到验证失败的处理方法,帮助开发者顺利完成注册,避免常见错误。

moss5的博客 1155

[高级]RabbitMQ总结看完别再说难了[下]

主页:写程序的小王叔叔的博客欢迎来访👀 支持:点赞​收藏​关注​ 社区:JAVA全栈进阶学习社区欢迎加入 rabbitMQ是基于AMQP协议的,通过使用通用协议就可以做到在不同语言之间传递。 目录 消费端自定义监听 消费端限流 消费端ack与重回队列 消息重回队列 TTL队列/消息 死信队列 rabbitMQ集群模式 HAProxy性能为何这么好? keepAlive keepAlive的作用 Keepalived如何实现高可用 消费端自定义监听 消费端限流 ..

私信可回答各种问题~ 1057

编织数据的实时脉络——构建基于MySQL的数据编织平台,实现实时数据治理

除了上述基本设置外,我们还可以根据实际应用场景自定义一些特定的监控项目。例如,对于某些高并发读写的表,可能需要特别关注它们的锁等待时间和回滚段使用率;而对于涉及到跨库关联查询的操作,则应当着重检查网络延迟及缓存命中率等因素。-- 获取InnoDB行级锁等待情况-- 统计各表的缓存命中率这段SQL脚本不仅展示了如何查询InnoDB引擎下的锁争用状况,还介绍了计算表级别缓存命中率的方法,有助于深入理解系统的运行状态。

墨夶的博客 1789

基石篇:多模态数据工程导论与核心概念

多模态数据工程不是写Python脚本处理几张图片,而是设计并构建一套系统,来规模化地生产高质量、可追溯、符合合规要求的模型就绪数据。本文将为你建立正确的数据工程思维框架,明确其在多模态AI生态中的战略地位,并为后续的深入学习奠定坚实基础。

jiaquan3011的博客 627

RabbitMQ高阶/网络分区/消息追踪/负载均衡

RabbitMQ高阶 RabbitMQ实现原理 存储机制 持久化的消息到达时就写入磁盘,如果可以在内存中也会保存一份备份,以提高一定性能 非持久化消息到达时在内存中,当内存吃紧时,会被换入磁盘 消息包括消息体、属性和headers $RABBITMQ_HOME/var/lib/mnesia/rabbit@$HOSTNAME/文件夹下的queues、msg_store_persistent...

这是一个记录学习的博客 1605

ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储

ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储 508A内部存储区介绍 Data Zone Config Zone 508A Config Zone配置(自定义) - ATECC508A芯片在使用之前,需要自定义配置ConfigZone与DataZone,并同Lock命令将两个区域锁住,否则无法正常使用功能。而一旦锁上就是永久性的,配置区不能够进行解锁

HowieXue 薛永浩的博客 2万+

RabbitMQ 教程 | 第6章 RabbitMQ 配置

这篇 RabbitMQ 教程为学习者提供了全面的内容,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

编程洪同学 4045

2026年全国青少年信息素养大赛复赛真题(算法应用主题赛C++初中组:带解析)(7月4日试卷一)【文末附答案和解析】

2026年全国青少年信息素养大赛复赛真题(算法应用主题赛C++初中组:带解析)(7月4日试卷一)【文末附答案和解析】

王老师青少年编程 1732

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

RabbitMQ 教程 | 第7章 RabbitMQ 运维

这篇 RabbitMQ 教程为学习者提供了全面的内容,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

编程洪同学 829

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RabbitMQ 教程 | 第11章 RabbitMQ 扩展

这篇 RabbitMQ 教程为学习者提供了全面的内容,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

编程洪同学 390

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

CentOS Stream 9下RabbitMQ安装教程(最新RabbitMQ安装教程)

操作系统:CentOS Stream 9 64位安装RabbitMQ版本:目前官网最新版本3.11.6安装Erlang版本:与RabbitMQ3.11.6配套的Erlang最新版本25.2在安装RabbitMQ之前,需要安装Erlang/OTP支持的版本。RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的。本篇博客主要是阅读的RabbitMQ官网进行的安装操作,并借此总结的博客。

理想主义的花最终会盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 2431

Linux使用Docker安装最新rabbitmq3.9版本

这里是目录

tt15304911199的博客 2120

RabbitMQ 教程 | 第5章 RabbitMQ 管理

这篇 RabbitMQ 教程为学习者提供了全面的内容,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

编程洪同学 1822

RabbitMQ 第9章

存储机制: 1 持久化消息也会在内存中保存一份,当内存紧张的时候,将其从内存中移除 2 非持久化的消息,一般会保存在内存中。当内存紧张时,将其置换到硬盘中 持久层包含两部分: 1 队列索引 2 消息存储 队列索引维护落地消息的信息:1 存储地点 2 消息是否已经交给消费者 3 消息是否已经被ack 每个队列都有一个与其对应的队列索引。 消息存储以 键值对方式存储消息,被所有队列共享...

csdn_9527666的博客 146

Centos7.9安装rabbitmq

RabbitMq安装、延时队列安装、下载

suenpeng 2373

005 CentOS 7.9 RabbitMQ安装及配置

005 CentOS 7.9 RabbitMQ安装及配置

m0_46695127的博客 1661

Linux下搭建RabbitMQ(3.9.8)版本

linux下安装Rabbit MQ 安装Erlang环境 目前我们是linux 3.10的内核,centOS版本是7.5 uname -srm cat /etc/redhat-release RabbitMQ是用Erlang语言编写的,在本教程中我们将安装最新版本的Erlang到服务器中。 由于Erlang在默认的YUM存储库中不可用,因此我们将需要安装EPEL存储库。 在线安装软件之前,我们可以先更新下yum 更新yum yum -q makecache -y --disablerepo= '*'

歪桃的博客 4865

RabbitMQ 教程 | 第1章 RabbitMQ 简介

这篇 RabbitMQ 教程为学习者提供了全面的内容,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

编程洪同学 343

在 “Linux 9“ 系统快速安装配置RabbitMQ

现在你已经成功安装了一个功能正常的 RabbitMQ 服务器,并带有管理界面和一个管理员用户!你可以开始创建虚拟主机、交换机、队列,并连接你的应用程序了。这是在 “Linux 9” 系统(如 RHEL 9、AlmaLinux 9、Rocky Linux 9)上安装和配置 RabbitMQ 的中文指南。运行这些脚本后,你的系统将被配置为从这些受信任的源获取 Erlang 和 RabbitMQ。这个插件提供了一个基于 Web 的 UI,用于管理 RabbitMQ,非常有用。RabbitMQ 的配置主要通过。

u011197085的博客 1374
上一篇: 第3章 垃圾收集器与内存分配策略
下一篇: 第8章 虚拟机字节码执行引擎
limeOracle
博客等级 码龄10年 11粉丝 566原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值