[
https://issues.apache.org/jira/browse/ROCKETMQ-242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16110468#comment-16110468
]
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_r130805162
--- 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 fetch name servers task must be running when client started so
that client can update the failed namesrv by itself, we can make some
conditions to trigger it such as if wsAddr is not default
> 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)