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

ASF GitHub Bot commented on ROCKETMQ-242:
-----------------------------------------

Github user qqeasonchen commented on a diff in the pull request:

    https://github.com/apache/incubator-rocketmq/pull/139#discussion_r131060698
  
    --- 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 --
    
    @shroman @Jaskey 
    sure the design is ok, but i think you guys didn't catch my question, there 
is a bug here : 
    if i didn't specified nameserver address and choose to fetch dynamically, 
but infact
    when client start ,if nameserver address is null ,it will fetch it first
    // If not specified,looking address from name server
    if (null == this.clientConfig.getNamesrvAddr()) { 
this.mQClientAPIImpl.fetchNameServerAddr(); }
    
    and then in startScheduledTask(), the schedule task will not be started 
because just now fetch it
    so the client will not be able to fetch nameserver dynamically.
    hope make it clear about my question.
    
    private void startScheduledTask() {
            if (null == this.clientConfig.getNamesrvAddr()) {
                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);
            }



> 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)

Reply via email to