Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
4.0.0-incubating, 4.1.0-incubating
-
None
-
test and production
Description
when mqclientinstance start, it getNameSrvAddr once by bellow code:
if (null == this.clientConfig.getNamesrvAddr())
but in startScheduledTask(),it will not start the schedule task if namesrvAddr is not null
================code=====================
public void start() throws MQClientException {
synchronized (this) {
switch (this.serviceState) {
case CREATE_JUST:
this.serviceState = ServiceState.START_FAILED;
// If not specified,looking address from name server
* if (null == this.clientConfig.getNamesrvAddr()) { this.clientConfig.setNamesrvAddr(this.mQClientAPIImpl.fetchNameServerAddr()); }
*
// Start request-response channel
this.mQClientAPIImpl.start();
// Start various schedule tasks
this.startScheduledTask();
// Start pull service
this.pullMessageService.start();
// Start rebalance service
this.rebalanceService.start();
// Start push service
this.defaultMQProducer.getDefaultMQProducerImpl().start(false);
log.info("the client factory [{}] start OK", this.clientId);
this.serviceState = ServiceState.RUNNING;
break;
case RUNNING:
break;
case SHUTDOWN_ALREADY:
break;
case START_FAILED:
throw new MQClientException("The Factory object[" + this.getClientId() + "] has been created before, and failed.", null);
default:
break;
}
}
}
private void startScheduledTask() {
* if (null == this.clientConfig.getNamesrvAddr()) {*
this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try
catch (Exception e)
{ log.error("ScheduledTask fetchNameServerAddr exception", e); } }
}, 1000 * 10, 1000 * 60 * 2, TimeUnit.MILLISECONDS);
}