You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@rocketmq.apache.org by "Jaskey Lam (JIRA)" <ji...@apache.org> on 2017/07/26 07:54:00 UTC

[jira] [Comment Edited] (ROCKETMQ-242) mqclient can not fetch nameSrvAddr periodly

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

Jaskey Lam edited comment on ROCKETMQ-242 at 7/26/17 7:53 AM:
--------------------------------------------------------------

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 be triggered when nameserver is NOTspecified by user. If an user configures the name server explicitly, that means the user hopes to use the specified one rather than a remote value which is possible changed.

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


was (Author: jaskey):
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)