GithubHelp home page GithubHelp logo

Comments (2)

highlyunavailable avatar highlyunavailable commented on July 26, 2024

Yes, the ConsulClient class is threadsafe and should be shared across all threads in an application. It is more efficient to create one and share it because a single TCP connection can be held open for all requests on that ConsulClient - internally it's constructing an HttpClient for every ConsulClient so setup and teardown costs of that class apply as well.

There would be a data race issue (which is being fixed in 0.7.0 with new semantics around construction of the client) if you modify any properties of the client or its underlying HttpClient while using the Client in another thread, but if you do share it across threads and run into any sort of error or race condition due to multithreading other than the previously stated caveat, it is a bug and should be reported. The Lock and Semaphore classes are also threadsafe as you might expect, but the other types (e.g. KVPair) that are simply data container classes are not threadsafe.

Please let me know if you have any further questions and I'll be happy to re-open this to address those as well.

from consuldotnet.

v-karbovnichy avatar v-karbovnichy commented on July 26, 2024

We faced an issue with k/v monitoring API and one ConsulClient instance for all threads.

Scenario: we have a class that provides configuration parameters for application stored in consul k/v. When we create an instance of this class, all values are get from k/v store. After each value fetched, we start its value monitoring by this code:

var queryOprions = new QueryOptions
{
	WaitIndex = lastModifyIndex,
	WaitTime = TimeSpan.FromMinutes(10)
};
monitoringGet = await consulClient
	.KV
	.Get(valueKeyPath, queryOprions, ct);

So each monitoring call blocks any another calls.

from consuldotnet.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.