- 浏览: 623347 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (819)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (9)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
1. 镜像队列的设置
镜像队列的配置通过添加policy完成,policy添加的命令为:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition: 镜像定义,包括三个部分 ha-mode,ha-params,ha-sync-mode
ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
all表示在集群所有的节点上进行镜像
exactly表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
nodes表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params: ha-mode模式需要用到的参数
ha-sync-mode: 镜像队列中消息的同步方式,有效值为automatic,manually
Priority: 可选参数, policy的优先级
例如,对队列名称以hello开头的所有队列进行镜像,并在集群的两个节点上完成镜像,policy的设置命令为:
rabbitmqctl set_policy hello-ha "^hello" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
2. 镜像队列的大概实现
(1) 整体介绍
通常队列由两部分组成:一部分是amqqueue_process,负责协议相关的消息处理,即接收生产者发布的消息、向消费者投递消息、处理消息confirm、acknowledge等等;另一部分是backing_queue,它提供了相关的接口供amqqueue_process调用,完成消息的存储以及可能的持久化工作等。
镜像队列同样由这两部分组成,amqqueue_process仍旧进行协议相关的消息处理,backing_queue则是由master节点和slave节点组成的一个特殊的backing_queue。master节点和slave节点都由一组进程组成,一个负责消息广播的gm,一个负责对gm收到的广播消息进行回调处理。在master节点上回调处理是coordinator,在slave节点上则是mirror_queue_slave。mirror_queue_slave中包含了普通的backing_queue进行消息的存储,master节点中backing_queue包含在mirror_queue_master中由amqqueue_process进行调用。
注意:消息的发布与消费都是通过master节点完成。master节点对消息进行处理的同时将消息的处理动作通过gm广播给所有的slave节点,slave节点的gm收到消息后,通过回调交由mirror_queue_slave进行实际的处理。
(2) gm(Guaranteed Multicast)
传统的主从复制方式:由master节点负责向所有slave节点发送需要复制的消息,在复制过程中,如果有slave节点出现异常,master节点需要作出相应的处理;如果是master节点本身出现问题,那么slave节点间可能会进行通信决定本次复制是否继续。当然为了处理各种异常情况,整个过程中的日志记录是免不了的。
然而rabbitmq中并没有采用这种方式,而是将所有的节点形成一个循环链表,每个节点都会监控位于自己左右两边的节点,当有节点新增时,相邻的节点保证当前广播的消息会复制到新的节点上;当有节点失效时,相邻的节点会接管保证本次广播的消息会复制到所有节点。
在master节点和slave节点上的这些gm形成一个group,group的信息会记录在mnesia中。不同的镜像队列形成不同的group。
消息从master节点对应的gm发出后,顺着链表依次传送到所有节点,由于所有节点组成一个循环链表,master节点对应的gm最终会收到自己发送的消息,这个时候master节点就知道消息已经复制到所有slave节点了。
(3) 重要的表结构
rabbit_queue表记录队列的相关信息:
注意:slave_pids的存储是按照slave加入的时间来排序的,以便master节点失效时,提升"资格最老"的slave节点为新的master。
gm_group表记录gm形成的group的相关信息:
参考:https://my.oschina.net/hncscwc/blog/186350?p=1
镜像队列的配置通过添加policy完成,policy添加的命令为:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition: 镜像定义,包括三个部分 ha-mode,ha-params,ha-sync-mode
ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
all表示在集群所有的节点上进行镜像
exactly表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
nodes表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params: ha-mode模式需要用到的参数
ha-sync-mode: 镜像队列中消息的同步方式,有效值为automatic,manually
Priority: 可选参数, policy的优先级
例如,对队列名称以hello开头的所有队列进行镜像,并在集群的两个节点上完成镜像,policy的设置命令为:
rabbitmqctl set_policy hello-ha "^hello" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
2. 镜像队列的大概实现
(1) 整体介绍
通常队列由两部分组成:一部分是amqqueue_process,负责协议相关的消息处理,即接收生产者发布的消息、向消费者投递消息、处理消息confirm、acknowledge等等;另一部分是backing_queue,它提供了相关的接口供amqqueue_process调用,完成消息的存储以及可能的持久化工作等。
镜像队列同样由这两部分组成,amqqueue_process仍旧进行协议相关的消息处理,backing_queue则是由master节点和slave节点组成的一个特殊的backing_queue。master节点和slave节点都由一组进程组成,一个负责消息广播的gm,一个负责对gm收到的广播消息进行回调处理。在master节点上回调处理是coordinator,在slave节点上则是mirror_queue_slave。mirror_queue_slave中包含了普通的backing_queue进行消息的存储,master节点中backing_queue包含在mirror_queue_master中由amqqueue_process进行调用。
注意:消息的发布与消费都是通过master节点完成。master节点对消息进行处理的同时将消息的处理动作通过gm广播给所有的slave节点,slave节点的gm收到消息后,通过回调交由mirror_queue_slave进行实际的处理。
(2) gm(Guaranteed Multicast)
传统的主从复制方式:由master节点负责向所有slave节点发送需要复制的消息,在复制过程中,如果有slave节点出现异常,master节点需要作出相应的处理;如果是master节点本身出现问题,那么slave节点间可能会进行通信决定本次复制是否继续。当然为了处理各种异常情况,整个过程中的日志记录是免不了的。
然而rabbitmq中并没有采用这种方式,而是将所有的节点形成一个循环链表,每个节点都会监控位于自己左右两边的节点,当有节点新增时,相邻的节点保证当前广播的消息会复制到新的节点上;当有节点失效时,相邻的节点会接管保证本次广播的消息会复制到所有节点。
在master节点和slave节点上的这些gm形成一个group,group的信息会记录在mnesia中。不同的镜像队列形成不同的group。
消息从master节点对应的gm发出后,顺着链表依次传送到所有节点,由于所有节点组成一个循环链表,master节点对应的gm最终会收到自己发送的消息,这个时候master节点就知道消息已经复制到所有slave节点了。
(3) 重要的表结构
rabbit_queue表记录队列的相关信息:
引用
-record(amqqueue,
{
name, %%队列的名称
durable, %%标识队列是否持久化
auto_delete, %%标识队列是否自动删除
exclusive_owner, %%标识是否独占模式
arguments, %%队列创建时的参数
pid, %%amqqueue_process进程PID
slave_pids, %%mirror_queue_slave进程PID集合
sync_slave_pids, %%已同步的slave进程PID集合
policy, %%与队列有关的policy
%%通过set_policy设置,没有则为undefined
gm_pids, %%{gm,mirror_queue_coordinator},{gm,mirror_queue_slave}进程PID集合
decorator %%
}).
{
name, %%队列的名称
durable, %%标识队列是否持久化
auto_delete, %%标识队列是否自动删除
exclusive_owner, %%标识是否独占模式
arguments, %%队列创建时的参数
pid, %%amqqueue_process进程PID
slave_pids, %%mirror_queue_slave进程PID集合
sync_slave_pids, %%已同步的slave进程PID集合
policy, %%与队列有关的policy
%%通过set_policy设置,没有则为undefined
gm_pids, %%{gm,mirror_queue_coordinator},{gm,mirror_queue_slave}进程PID集合
decorator %%
}).
注意:slave_pids的存储是按照slave加入的时间来排序的,以便master节点失效时,提升"资格最老"的slave节点为新的master。
gm_group表记录gm形成的group的相关信息:
参考:https://my.oschina.net/hncscwc/blog/186350?p=1
发表评论
-
RocketMQ教程,包含所有MQ核心知识点!
2022-04-28 13:49 155RocketMQ教程,包含所有MQ核心知识点 原创 | Ja ... -
rabbitmq死信队列和延时队列的使用
2021-12-25 23:19 240rabbitmq死信队列和延时队列的使用 -
IM消息送达保证机制实现(一):保证在线实时消息的可靠投递
2021-12-14 11:49 163[url=http://www.52im.net/thread ... -
RabbitMQ高级特性TTL队列/消息
2021-09-04 22:47 210RabbitMQ高级特性-TTL队列/消息 RabbitMQ ... -
如何保证消息不丢失,消息顺序执行-面试
2021-05-26 20:24 227关于MQ的几件小事(四)如何保证消息不丢失 如何保证Rab ... -
RabbitMQ 相关问题汇总
2017-06-28 17:43 427RabbitMQ 相关问题汇总 rabbitmq基础概念与基 ... -
rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack
2017-06-12 20:30 2156http://blog.csdn.net/u010841296 ... -
rabbitmq消费消息的两种方式
2016-12-05 20:12 993rabbitMQ中consumer通过建立到queue的连接, ... -
RabbitMQ 内部实现
2016-12-01 14:41 1013http://blog.csdn.net/joeyon1985 ... -
OpenStack RabbitMQ 集群-后续整理
2016-12-01 14:18 500参考:http://www.iyunv.com/thread- ... -
RabbitMQ (三) 发布/订阅
2016-11-30 19:53 5541、转发器(Exchanges) ... -
RabbitMQ学习(六)之远程过程调用(RPC)
2016-11-30 14:31 833在一般使用RabbitMQ做RPC很容易。客户端发送一个请求消 ... -
RabbitMQ学习之Headers交换类型
2016-11-28 10:51 790Headers类型的exchange使用的比较少,它也是忽略r ... -
RabbitMQ能打开的最大连接数
2016-11-28 10:29 2566转自:http://blog.csdn.net/huoyuns ... -
RabbitMQ基础知识
2016-11-28 10:25 515Routing key由生产者指定。Binding key由消 ... -
RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析
2016-11-25 21:36 882rabbitMQ中consumer通过建立到queue的连接, ... -
解决RabbitMQ远程不能访问的问题
2016-11-24 15:18 1156刚刚安装的RabbitMQ-Server-3.3.5,并且 ... -
RabbitMQ用户角色及权限控制
2016-11-24 11:08 1748RabbitMQ:基本命令 rabbitmq的安装、启动和停 ... -
publish消息确认
2016-11-23 18:01 662Using standard AMQP, the only w ... -
rabbitMQ ConfirmListener
2016-11-23 15:53 2150消息消费者 操作步骤: 1. 创建连接工厂Connection ...
相关推荐
此外,还会讨论如何设置镜像队列,进一步提高数据的安全性和一致性。 消息路由和交换机是RabbitMQ的核心功能之一。书中会深入讲解各种类型的交换机(如Direct、Fanout、Topic和Header),以及它们在不同场景下的...
实战篇还将涵盖高级主题,如死信队列(Dead Letter Queue)、延迟队列(Delayed Queue)、高可用集群(Clustering)和镜像队列(Mirrored Queues)等。这些都是在生产环境中确保RabbitMQ稳定性和高可用性的关键配置...
- **镜像队列**:主队列和镜像队列之间的同步,确保高可用性。 - **公平调度**:确保每个消费者都有机会消费消息,避免某些消费者过载。 - **监控与管理**:使用RabbitMQ Management Dashboard监控队列状态,及时...
2. 节点同步:RabbitMQ使用镜像队列策略,确保消息在集群中多个节点间同步,保证数据一致性。 3. 故障转移:当某个节点故障时,集群能自动将该节点上的工作负载转移到其他正常节点,保证服务不间断。 4. 集群扩展...
此外,镜像队列(Mirrored Queues)可以进一步提高数据安全性。 **三、分布式消息队列** 1. **消息一致性**:在分布式环境中,确保消息的顺序性和一致性至关重要。RabbitMQ提供了事务和确认机制来保证消息的可靠性...
4. **高可用性**:RabbitMQ支持多种模式来确保高可用性,如镜像队列(queue mirroring),其中队列的内容会在多个节点间复制,即使某个节点失败,消息也不会丢失。 5. **多种客户端支持**:由于RabbitMQ是基于AMQP...
5. **高可用性**:通过镜像队列和集群功能,RabbitMQ 2.8.5能够实现数据备份和故障转移,保证服务的不间断。 三、安装与配置 1. **下载与解压**:从官方网站获取rabbitmq-server-2.8.5.tar.gz,解压后配置环境变量...
4. **插件扩展**: RabbitMQ 支持多种插件,包括用于持久化、镜像队列、集群间复制等功能,可以根据实际需求安装。 5. **消息模型与协议**: 了解 AMQP 协议,理解基本概念如信道、队列、交换机和绑定,是使用 ...
3. **镜像队列**:提供高可用性,通过复制队列到多个节点,确保即使单个节点失败,数据也不会丢失。 4. **工作队列**:用于负载均衡,多个消费者可以同时处理队列中的任务,避免单一消费者负担过重。 5. **TTL...
在升级过程中,尤其需要注意的是RabbitMQ内部的数据存储系统——mnesia数据库的升级操作。Mnesia是Erlang语言的标准分布式数据库,RabbitMQ基于它来存储队列、交换机、绑定等信息。 在升级过程中,以下几个关键步骤...
- **镜像队列**: 提供高可用性,通过在多个节点间复制队列,确保即使节点故障,数据也不会丢失。 ### 6. 应用场景 RabbitMQ在各种场景下都能发挥重要作用,例如: - **Web应用**: 异步处理用户请求,如发送邮件、...
同时,RabbitMQ还支持集群和镜像队列,以实现数据冗余和故障转移。 总之,正确安装和配置RabbitMQ和Erlang是利用这一强大消息中间件的关键。了解其基本概念和操作,能帮助你有效地集成RabbitMQ到你的系统中,提升...
#### 消息中间件——RabbitMQ:如何保证消息不丢失? 为了确保消息不丢失,RabbitMQ 提供了一系列机制和技术手段来增强系统的可靠性。 1. **开启生产者确认机制**: - 生产者发送消息时,如果希望确认消息是否...
RabbitMQ的实现原理中,它采用了Erlang语言,提供了高可用性和高容错性,通过集群和镜像队列策略保证数据的可靠性。 接下来是Apache Kafka,Kafka是一个高性能、分布式的流处理平台。与RabbitMQ不同,Kafka更专注于...
这里,`nova-api`作为生产者,将重建实例的指令封装成消息,推送到RabbitMQ队列,等待`nova-compute`服务消费。 `nova-compute`服务是OpenStack计算节点的核心组件,负责实例的实际运行和管理。当`nova-compute`...
在本篇文章中,我们将深入探讨Canal客户端——canal.deployer-1.1.7-SNAPSHOT.tar.gz的核心内容,以及其包含的lib、bin、plugin、logs、conf等目录的用途和重要性。 1. **lib目录**:这是Canal部署中的核心库文件夹...
4. **数据库和消息队列**:OpenStack服务之间的通信通常依赖于数据库(如MySQL或MongoDB)和消息队列(如RabbitMQ)。需要为每个服务设置相应的数据库和队列连接。 5. **配置服务**:在/etc目录下创建各服务的配置...
- **消息队列 (RabbitMQ Server)**:用于Nova组件间的消息传递,确保异步通信的实现。 - **运算工作站 (nova-compute)**:负责管理实例的生命周期,执行实例的各种操作。 - **网络控制器 (nova-network)**:管理...
接着,安装RabbitMQ消息队列服务器: ```bash apt-get install -y rabbitmq-server ``` 为了保证时间同步,安装NTP服务: ```bash apt-get install -y ntp ``` 此外,确保网络转发功能已启用,通过修改`/etc/...
7. **Spring Integration**:提供了多种企业服务集成模式,如文件系统、邮件、消息队列等,便于实现不同系统间的通信。 8. **Spring AMQP**:支持基于Advanced Message Queuing Protocol(AMQP)的消息传递,可以与...