3.6.5 领导者选举相关属性设置
我们在前面小节已经基本了解了领导者选举的过程和应用,并学会配置了一个领导者候选者的Master/Slave的主备关系,当Master宕机或者网络故障时,可以不受影响切换到Slave上提供服务,这里我们补充一些关于领导者选举的属性设置,可以应用在不同的情形下。在config.xml的park部分配置里,我们可以看到:
- <SERVERS>localhost:1888,localhost:1889</SERVERS>
- <ALWAYSTRYLEADER>false</ALWAYSTRYLEADER>
ALWAYSTRYLEADER这个配置项默认值是false,代表是否一直进行领导者寻找,如果在集群中没有领导者,也没有候选者替补,应用程序会根据配置值一直寻找并等待下去,直到最后找到,还是寻找一轮后放弃,我们可以看看下面的简单例子。
LeaderTest是一个简单的ParkServer应用端,它只有一行代码“ParkLocal pl=BeanContext.getPark();”,如果我们不启动ParkServer的Master/Slave主备结构,而直接运行LeaderTest,代码如下,结果如图3-19所示。
- java -cp fourinone.jar; LeaderTest
- import com.fourinone.BeanContext;
- import com.fourinone.ParkLocal;
- public class LeaderTest
- {
- public static void main(String[] args)
- {
- ParkLocal pl = BeanContext.getPark();
- }
- }

图3-19 LeaderTest-1
我们发现LeaderTest会一直反复地请求localhost:1888和localhost:1889,直到最后连接成功。如果我们不想这样无限制地寻找下去,可以将配置改为:
- <ALWAYSTRYLEADER>true</ALWAYSTRYLEADER>
我们再启动LeaderTest,如图3-20所示。

图3-20 LeaderTest-2
我们发现LeaderTest按照“localhost:1888、localhost:1889、localhost:1888”寻找了一轮后,发现集群仍然没有可用的领导者,便停止寻找而退出。
