[官方翻译]RabbitMQ Federation&Shovel AP 集群

阅读:440 2019-03-19 15:02:37 来源:新网

官方提供的另外一种集群方式,基本工作原理:通过使用rabbitmq的插件的形式提供集群功能.每个节点都启用rabbitmq_federation,rabbitmq_federation_management.节点之间通过amqp协议传输消息,由于是遵循协议,所以节点之间的版本可以不同,不想原生集群那么多限制.绑定关系,通过设定parameter和policy关联集群.

特性:

我使用docker创建两个容器

dockerrun-d--hostnamemy-rabbit-cluster-federation--namemy-rabbit-cluster-federationfansin/rabbitmq-clusterdockerrun-d--linkmy-rabbit-cluster-federation--hostnamemy-rabbit-cluster-federation-1--namemy-rabbit-cluster-federation-1fansin/rabbitmq-cluster

第一步启动插件启动每个节点的插件

rabbitmq-pluginsenablerabbitmq_federationrabbitmq_federation_management

第二步downstream节点设置加入集群目标节点设置/清楚参数,用来关联集群节点

rabbitmqctlset_parameterfederation-upstreammy-upstream'{"uri":"amqp://admin:admin@my-rabbit-cluster-federation/%2f","expires":3600000}'rabbitmqctlclear_parameterfederation-upstreammy-upstream

第三步downstream节点设置集群内容设置/清除策略,用来确定加入集群exchange,无法加载""空exchange

rabbitmqctlset_policy--apply-toallfederate-all"^fed."'{"federation-upstream-set":"all"}'rabbitmqctlclear_policyfederate-all

单独设置exchange或queue

rabbitmqctlset_policy--apply-toqueuesfederate-queue"^queue."'{"federation-upstream-set":"all"}'rabbitmqctlset_policy--apply-toexchangesfederate-exchange"^exchange."'{"federation-upstream-set":"all"}'

第四步验证集群

rabbitmqctleval'rabbit_federation_status:status().'

现在看my-rabbit-cluster-federation的集群会看到多个连接,然后再看my-rabbit-cluster-federation-1也会看到多个连接,同时exchange上会有"federate-all"特性.

代码测试用例

建议先创建好queue或者exchange,如果不提前创建,代码第一次启动会报错.第二次就正常了.队列默认创建的是durable的exchange或者queue,如果遇到durable的问题,需要重新删掉对应的exchange或者queue,重新创建.

dockerfederation

dockerrun-d--hostnamemy-rabbit-federation--namemy-rabbit-federationfansin/rabbitmq-federationdockerrun-d--linkmy-rabbit-federation-ejoin_cluster=my-rabbit-federation--hostnamemy-rabbit-federation-1--namemy-rabbit-federation-1fansin/rabbitmq-federation

再次贴一下与原生集群的区别:

分布式原理:federation/shovel:exchange逻辑上是分离的,可能有不同的拥有者

官网介绍了提供了5种基本集群格式:

1基本集群方式,这个是单向的集群

2两节点相互federation,默认参数max_hops=1不需要特殊设置

3三节点两两federation,上面的节点+1,默认参数max_hops=1不需要特殊设置

4扇出(p/s订阅)树型跟fanout的exchange类似功能,注意设置参数max_hops=0,如果确定树的深度,max_hops应当大于等于树的深度

5环形参数设置为max_hops=5有一点,一旦环中一个节点down,整个环也就断了.

shovel跟federation使用类似,但使用的是erlangclient,更底层,更多配置,也更灵活.默认使用动态配置,关于静态配置请详看官网shovel

特性:

同样使用docker重新创建两个新容器

dockerrun-d--hostnamemy-rabbit-cluster-federation--namemy-rabbit-cluster-federation-erabbitmq_erlang_cookie='secretcookiehere'fansin/rabbitmq-clusterdockerrun-d--linkmy-rabbit-cluster-federation--hostnamemy-rabbit-cluster-federation-1--namemy-rabbit-cluster-federation-1-erabbitmq_erlang_cookie='secretcookiehere'fansin/rabbitmq-cluster

第一步启动插件启动每个节点的插件

rabbitmq-pluginsenablerabbitmq_shovelrabbitmq_shovel_management

第二步dest节点(在src节点也可以,比较灵活)设置加入集群目标节点设置/清楚参数,用来关联集群节点

rabbitmqctlset_parametershovelmy-shovel-queue'{"src-uri":"amqp://admin:admin@my-rabbit-cluster-federation/%2f","src-queue":"shovel.queue","dest-uri":"amqp://admin:admin@my-rabbit-cluster-federation-1/%2f","dest-queue":"shovel.queue"}'rabbitmqctlclear_parametershovelmy-shovel-queue

设置exchange

rabbitmqctlset_parametershovelmy-shovel-exchange'{"src-uri":"amqp://admin:admin@my-rabbit-cluster-federation/%2f","src-exchange":"shovel.exchange","dest-uri":"amqp://admin:admin@my-rabbit-cluster-federation-1/%2f","dest-exchange":"shovel.exchange"}'rabbitmqctlset_parametershovelmy-shovel-exchange-1'{"src-uri":"amqp://admin:admin@my-rabbit-cluster-federation-1/%2f","src-exchange":"shovel.exchange","dest-uri":"amqp://admin:admin@my-rabbit-cluster-federation/%2f","dest-exchange":"shovel.exchange"}'

在docker容器中,后启动的容器link了前面的容器,但是前面的无法识别到后面容器ip,如果要在src节点设置shovel,注意加入域名映射

echo"172.17.0.4my-rabbit-cluster-federation-1">>/etc/hosts

代码测试用例

建议先创建好queue或者exchange,如果不提前创建,代码第一次启动会报错.第二次就正常了.队列默认创建的是durable的exchange或者queue,如果遇到durable的问题,需要重新删掉对应的exchange或者queue,重新创建.

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服