package com.alibaba.rocketmq.namesrv.daemon; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.rocketmq.common.MixAll; import com.alibaba.rocketmq.common.ServiceThread; import com.alibaba.rocketmq.common.namesrv.NamesrvConfig; import com.alibaba.rocketmq.common.namesrv.TopAddressing; /** * ��ѵ��ȡweb server��namesrv�б���Ϣ * * @author lansheng.zj@taobao.com */ public class PollingAddress extends ServiceThread { private static final Logger log = LoggerFactory.getLogger(MixAll.NamesrvLoggerName); private NamesrvConfig namesrvConfig; private TopAddressing topAddressing; public PollingAddress(NamesrvConfig config) { namesrvConfig = config; topAddressing = new TopAddressing(); } public String fetchAddr() { return topAddressing.fetchNSAddr(); } public void setAddrAndFireChange(String addrs) { String old = namesrvConfig.getNamesrvAddr(); namesrvConfig.setNamesrvAddr(addrs); namesrvConfig.firePropertyChange("namesrvAddr", old, addrs); } @Override public void run() { // ������ʱ���ֶ������ˣ�����Ҫͨ��webserver��̬�Ļ�ȡnamesrv��Ⱥ��ַ if(null!=namesrvConfig.getNamesrvAddr() && !"".equals(namesrvConfig.getNamesrvAddr())) { return ; } while (!isStoped()) { String addrs = fetchAddr(); if (null != addrs && !addrs.equals(namesrvConfig.getNamesrvAddr())) { setAddrAndFireChange(addrs); if (log.isInfoEnabled()) { log.info("poll address from web server, addrs=" + addrs); } } waitForRunning(namesrvConfig.getAddressInterval()); } } @Override public String getServiceName() { return "namesrv-polling-address"; } }