[ https://issues.apache.org/jira/browse/ROCKETMQ-242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16108453#comment-16108453 ]
ASF GitHub Bot commented on ROCKETMQ-242: ----------------------------------------- Github user shroman commented on a diff in the pull request: https://github.com/apache/incubator-rocketmq/pull/139#discussion_r130528221 --- Diff: client/src/main/java/org/apache/rocketmq/client/impl/factory/MQClientInstance.java --- @@ -255,19 +255,17 @@ public void start() throws MQClientException { } private void startScheduledTask() { - if (null == this.clientConfig.getNamesrvAddr()) { --- End diff -- I think what @qqeasonchen says makes sense, but we have discuss what behavior we want to have. To me, if addresses have been manually specified, it makes sense to fetch name servers only if a call to manually specified servers fail. No need to do periodic calls. What do you think? > mqclient can not fetch nameSrvAddr periodly > ------------------------------------------- > > Key: ROCKETMQ-242 > URL: https://issues.apache.org/jira/browse/ROCKETMQ-242 > Project: Apache RocketMQ > Issue Type: Bug > Components: rocketmq-client > Affects Versions: 4.0.0-incubating, 4.1.0-incubating > Environment: test and production > Reporter: Eason Chen > Assignee: Xiaorui Wang > Fix For: 4.2.0-incubating > > > when mqclientinstance start, it getNameSrvAddr once by bellow code: > if (null == this.clientConfig.getNamesrvAddr()) { > > this.clientConfig.setNamesrvAddr(this.mQClientAPIImpl.fetchNameServerAddr()); > } > but in startScheduledTask(),it will not start the schedule task if > namesrvAddr is not null > ================code===================== > {code:java} > 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 > *{color:red} if (null == > this.clientConfig.getNamesrvAddr()) { > > this.clientConfig.setNamesrvAddr(this.mQClientAPIImpl.fetchNameServerAddr()); > }{color}* > // 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() { > *{color:red} if (null == this.clientConfig.getNamesrvAddr()) {{color}* > this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() { > @Override > public void run() { > try { > > MQClientInstance.this.mQClientAPIImpl.fetchNameServerAddr(); > } catch (Exception e) { > log.error("ScheduledTask fetchNameServerAddr > exception", e); > } > } > }, 1000 * 10, 1000 * 60 * 2, TimeUnit.MILLISECONDS); > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)