gm_group表 记 录 gm形 成 的 group的 相 关 信 息 :
%% 整个镜像队列群组的信息,该信息会存储到Mnesia数据库
-record(gm_group, { name, %% group的名称,与queue的名称一
致
version, %% group的版本号, 新增节点/节点
失效时会递增
members %% group的成员列表, 按照节点组
成的链表顺序进行排序
}).
view_member记 录 当 前 GM群 组 中 真 实 的 视 图 的 数 据 结 构 :
%% 镜像队列群组视图成员数据结构
-record(view_member, { id, %% 单个镜像队列(结构是{版本号,
该镜像队列的Pid})
aliases, %% 记录id对应的左侧死亡的GM进程
列表
left, %% 当前镜像队列左边的镜像队列(
结构是{版本号,该镜像队列的Pid})
right %% 当前镜像队列右边的镜像队列(
结构是{版本号,该镜像队列的Pid})
}).
记 录 单 个 GM进 程 中 信 息 的 数 据 结 构 :
%% 记录单个GM进程中信息的数据结构
-record(member, { pending_ack, %% 待确认的消息,也就是已发布的
消息缓存的地方
last_pub, %% 最后一次发布的消息计数
last_ack %% 最后一次确认的消息计数
}).
三. 镜像队列群组增加删除相关操作
(1) 新 增 节 点
slave节点先从gm_group中获取对应group的所有成员信息,然后随机选择一个节点并向这
个节点发送请求,这个节点收到请求后,更新gm_group对应的信息,同时通知左右节点更
新邻居信息(调整对左右节点的监控)及当前正在广播的消息,然后回复通知请求节点成
功加入group。请求加入group的节点收到回复后再更新rabbit_queue中的相关信息,并根
据需要进行消息的同步。