23、Cluster Support 集群支持

EasyNetQ支持RabbitMQ集群,而不需要部署负载平衡器。

只需在连接字符串中列出集群的节点:

var bus = RabbitHutch.CreateBus("host=ubuntu:5672,ubuntu:5673");

在这个示例中,我们在一台机器(主机名ubuntu)上安装了一个集群,节点1在端口5672上,节点2在端口5673上。当CreateBus语句执行时EasyNetQ 将会尝试连接到第一个节点 (ubuntu:5672),如果失败,再尝试连接到第二个节点 (ubuntu:5673)。如果两个节点都不可用,它将进入重试连接循环中,尝试每5秒连接一次这两个服务器。它将所有这些活动记录到已注册的IEasyNetQLogger中。

如果第一个节点不可用,您可能会看到这样的情况:

DEBUG: Trying to connect
ERROR: Failed to connect to Broker: 'ubuntu', Port: 5672 VHost: '/'. ExceptionMessage: 'None of the specified endpoints were reachable'
DEBUG: OnConnected event fired
INFO: Connected to RabbitMQ. Broker: 'ubuntu', Port: 5674, VHost: '/'

 

如果EasyNetQ已连接的节点出了故障,EasyNetQ会尝试连接到下一个节点。一旦连接成功,EasyNetQ会重新声明所有交换器、队列,重新开始所有的消费者。

下面是一个示例日志,显示一个节点故障后,EasyNetQ连接另一个节点,并重新创建订阅者:

INFO: Disconnected from RabbitMQ Broker
DEBUG: Trying to connect
DEBUG: OnConnected event fired
DEBUG: Re-creating subscribers
INFO: Connected to RabbitMQ. Broker: 'ubuntu', Port: 5674, VHost: '/'

 

二、随机选择主机

如果你有多个服务程序使用EasyNetQ连接到一个RabbitMQ集群,它们将首先连接各自的连接字符串中的第一个节点。如果你打算使用负载平衡特性,你应该转而考虑RandomClusterHostSelectionStrategy策略。需要如下配置:

var bus = RabbitHutch.CreateBus("host=myfirsthost,mysecondhost", 
                x => x.Register<IClusterHostSelectionStrategy<ConnectionFactoryInfo>, 
                        RandomClusterHostSelectionStrategy<ConnectionFactoryInfo>>()
);

在这个片段,我们已经用RandomClusterHostSelectionStrategy替换了默认的IClusterHostSelectionStrategy接口实例。这个随机策略将会随机选择主机。

更多替换EasyNetQ组件的信息,详见 here.

 

三、考虑使用专用负载平衡器

EasyNetQ集群支持的另一种方式是使用一个专用的前端代理。请参阅RabbitMQ集群指南的详细信息

http://www.rabbitmq.com/clustering.html

 

posted on 2017-12-07 15:34  困兽斗  阅读(200)  评论(0编辑  收藏  举报

导航