Federation联邦<br>
联邦exchange
要注意的点
1、不同broker节点直接用AMQP 0-9-1协议进行通讯<br>
2、可以容忍不稳定的网络环境
3、一个broker节点中可以有联邦的和普通的交换器(或队列)<br>
4、不需要在N个节点间建立O(N平方)个连接,更容易拓展<br>
5、两个交换器可以互为:federation和upstream<br>
6、默认交换器和内部交换器不能设置federation<br>
工作方式
1、broker1节点的交换器exchangeA
2、broker1内部交换器“exchangeA->broker2 B”
3、broker1内部队列“federation:exhchangeA->broker2 B”
4、broker2交换器exchangeA
联邦queue
要注意的点
1、联邦队列没有继承关系
2、不能用Basic.Get从远程队列拉取消息,只能用Basic.Cosume
工作方式
1、broker1节点的queue1有消息,消费者直接消费queue的消息
2、broker1节点的queue1没有消息,从broker2节点的queue2拉取消息到queue1
相关命令
rabbitmq-plugins enable rabbitmq_federation_management<br>
Federation link
Shovel铲子<br>
需要注意的点
1、数据的流向,本质一定是从队列流向交换器
相关命令
rabbit_plugins enable rabbitmq_shovel
Shovel link
cluster集群
需要注意的点
添加节点能线性拓展消息通信和吞吐量
单纯集群没办法保证消息的万无一失,需要配合镜像队列(同步有延迟)。
集群里的所有节点都会备份所有数据信息:队列、交换器、绑定关系、vhost
在集群创建队列,只有队列的宿主节点会启动队列进程,处理消息,其他节点只保存队列元数据
交换机只是保存一个名字和绑定列表,由所连接的通道负责路由消息到队列中
集群对时延敏感,只适合局域网
所有节点都关闭的时候,第一个重新启动的节点,必须是最后停止的节点
集群中必须有一个磁盘节点disc
集群中所有磁盘节点都挂了,集群能正常工作,但是无法执行任何元数据变更命令
相关命令
rabbitmq-server -detached
rabbitmqctl stop
rabbitmqctl cluster_status<br>
rabbitmqctl stop_app<br>
rabbitmqctl reset
rabbitmqctl join cluster 基准节点名称<br>
rabbitmqctl start_app
rabbitmqctl change_cluster_node_type {disc ram)<br>
rabbitmqctl forget_cluster_node 节点名称
删除节点的方式
rabbitmqctl forget_cluster_node 节点名称 -offline
rabbitmqctl reset
集群升级<br>
1、关闭所有节点的服务,注意采用 rabbitmqctl stop 命令关闭
2、保存各个节点的Mnesia 数据<br>
3、解压新版本的 RabbitMQ 指定的目录
4、指定新版本的Mnesia路径为步骤2中保存的路径<br>
5、启动新的服务,注意先启动最后关闭的节点<br>
节点故障恢复
1、rabbitmqctl forget_cluster_node 节点名称<br>
2、重置,清理Mnesia数据<br>
3、rabbitmqctl join cluster 基准节点名称
集群迁移
元数据迁移方式
1、web管理界面,旧集群导出,新集群导入
2、编写程序,调用rabbit服务器的http接口
数据迁移方式<br>
ForwardMaker<br>
Zookeeper的数据变更监听