[ 
https://issues.apache.org/jira/browse/ROCKETMQ-242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16101292#comment-16101292
 ] 

Jaskey Lam commented on ROCKETMQ-242:
-------------------------------------

The issue here should be by desgin.

Nameserver address is designed by the priority that using specified one then 
remote one.

So fetching name server from remote service should only triggered when 
nameserver is not specified by user. If user has configed the name server 
explicitly, meaning that user hopes to using the specified one rather than a 
remote value which is possible changed.

[~Yukon] please correct me if I am wrong. 

> 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=====================
> 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);
>         }



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to