I have a library which is being used by customer and they are passing
DataRequest object which has userid, various timeouts and some other fields
in it. Now I use this DataRequest object to make a URL and then I make an
HTTP call using Apache HttpClient and my service returns back a JSON
response which I use it to make a DataResponse object and return this
DataResponse object back to them.

Below is my DataClient class used by customer by passing DataRequest object
to it.

https://gist.github.com/TechGeeky/250be2d9cdef3fa5107a17058a265d4c

And here is DataFetcherTask class:

https://gist.github.com/TechGeeky/c1b21025e0f81d222b792dedac0a817d

Customer within our company will use my library like this as shown below by
using my factory in their code base -

    // if they are calling getSyncData() method
    DataResponse response =
DataClientFactory.getInstance().getSyncData(key);

    // and if they want to call getAsyncData() method
    Future<DataResponse> response =
DataClientFactory.getInstance().getAsyncData(key);

I am implementing "sync call as async + waiting" since I want to throttle
them with the number of threads otherwise they can bombard our service
without any control. My library will be used by lot of customers within our
company and their applications won't ever shutdown, they will keep running
always. The only thing will happen is their machines will get restarted,
that's all.

Is this the right way to use Apache HttpClient in production in
multithreaded environment? Or there is any better/efficient way?

I have to use various timeout values present in my DataRequest class in my
Apache HttpClient calls so that's  why I am creating RequestConfig and
using it in my call method. I have simplified the code so that idea gets
clear what I am trying to do.

Reply via email to