Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The problem of multiple keys in ConfigWatch #416

Open
ChaoyongLiang opened this issue Apr 27, 2018 · 6 comments
Open

The problem of multiple keys in ConfigWatch #416

ChaoyongLiang opened this issue Apr 27, 2018 · 6 comments

Comments

@ChaoyongLiang
Copy link

Hi,
I'm using consul config in a spring application, but I found a problem in the ConfigWatch.
I have two keys to watch. One is config/application/data which is for the common configuration, the ohter is config/appName/data which is for the private configuraion.
I hope that one of them is updated in consul, I need to kown the notification from consul. However, If config/application/data is blocked in the ConfigWatch and config/appName/data is updated now, the Spring application can't get any notification from consul. Because config keys are not blocked in the same time, they do watch action one by one. Therefore one key is blocked in watch, the other will not get any notification even if it has been updated.

for (String context : this.consulIndexes.keySet()) {
...
    Response<List<GetValue>> response = this.consul.getKVValues(context, aclToken,
        new QueryParams(this.properties.getWatch().getWaitTime(),
            currentIndex));
...
}

So, how can I do to solve this problem?

Thanks.

@spencergibb
Copy link
Member

They are executed in order. Are you saying that if one is updated while watching the other that the other is never updated?

@spring-projects-issues
Copy link

If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.

@ChaoyongLiang
Copy link
Author

They are executed in order. Are you saying that if one is updated while watching the other that the other is never updated?

Hello, thank you for your answer.

The othe is not never updated, it will update after the watching key has updated or watch timeout.
eg:
If config/application/data is blocked for 5 minutes in the ConfigWatch, the other key config/appName/data is updated now. However, I can't get notifycation from consul. Because ConfigWatch is watching the key config/application/data in process.

After 5 minutes, the watching config/application/data is returned, ConfigWatch starts to watch the other key config/appName/data, I can get notifycation from consul because the key has been updated.
But the notifycation is delayed in 5 minutes.

I means that ConfigWatch should watch all keys that belong to the application concurrently, instead of one by one.

@spencergibb
Copy link
Member

I think the answer would be to execute them in parallel using projectreactor.io.

@SamG1000
Copy link

Also looking for the same fix, concurrently watching each key seems to make most sense👍

takeseem added a commit to takeseem/spring-cloud-consul that referenced this issue Feb 10, 2021
@takeseem
Copy link

takeseem commented Feb 10, 2021

It really needs improvement, the waiting time is too long in multiple configurations.

The first configuration is the main configuration, and I only need to monitor the first configuration.

details pull #705

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants