Comments (9)
Another way to keep AsyncHttp from blocking jvm shutdown is to pass in your own thread factory to the netty timer and make the timer thread a daemon thread.
See also apache/druid#5076
Example config:
private def defaultClient(options: SttpBackendOptions): AsyncHttpClient =
new DefaultAsyncHttpClient(
new DefaultAsyncHttpClientConfig.Builder()
.setConnectTimeout(options.connectionTimeout.toMillis.toInt)
// use a daemon thread for the netty timer
// see also https://github.com/apache/incubator-druid/pull/5076
.setNettyTimer(new HashedWheelTimer(new ThreadFactoryBuilder().setDaemon(true).build()))
.build())
from sttp.
Try calling handler.close
.
from sttp.
As @aeons mentioned, I think you need to close the handler as well. Could you paste your full example?
Also, instead of creating a custom ExecutionContext
, you can use the global one by importing ExecutionContext.Implicits.global
from sttp.
I think I'm running into something similar:
import com.softwaremill.sttp._
import com.softwaremill.sttp.okhttp._
import scala.concurrent.Future
import scala.concurrent._
import scala.concurrent.duration._
object Evaluate extends App {
implicit val handler = OkHttpFutureHandler()
val response: Future[Response[String]] =
sttp
.post(uri"http://localhost")
.send()
println(Await.result(response, 500.millis))
}
This prints the expected response, then hangs:
- for ~= 60 seconds before quitting
- forever if I swap okhttp out for async handler (in its
Future
mode)
from sttp.
At the suggestion of @aeons , I've added a hander.close
call at the end:
- ok http: nothing changes
- async http: it takes a while to close, but it does (about 4 seconds on my local computer)
from sttp.
Indeed, however this only happens for OkHttpFutureHandler
. When using OkHttpSyncHandler
, the app finishes immediately
from sttp.
I think with async http client taking 4 seconds to close - not something we can influence, sttp is just calling the client's close()
method. I suppose terminating and joining all the threads for some reason takes up so much time.
from sttp.
This is caused by the internal dispatcher of OkHttp
, which is used only for async operations, like OkHttpFutureHandler
and OkHttpMonixHandler
. I just created a PR #32 that fixes this
from sttp.
OkHttp should be fixed in 0.11. AsyncHttp should use close() :)
from sttp.
Related Issues (20)
- CatsMonadAsyncError shouldn't use eval for blocking HOT 1
- Add an option of automatic pings and pongs to web sockets in HtttpClient backends
- Add support for play-json 3 HOT 1
- Update to Prometheus 1.x.x HOT 3
- [BUG] HEAD request times out using Http4s backend HOT 2
- Http proxy problem with async-http-client-backend-zio:3.9.1
- Uri interpolation incorrectly percent-encodes some characters HOT 2
- where is basicRequest? HOT 1
- AbstractFetchBackend does not support manual cancellation/interruption
- Expose AsyncHttpClient when creating AsyncHttpClientBackend HOT 2
- Preserve request-metadata in SttpBackendStub HOT 2
- is `null` valid header field value? HOT 5
- Integrate oauth? HOT 16
- add support Tethys json HOT 2
- Add Scala 3 support for play-json HOT 4
- quickRequest: Unexpected behaviour dependent on method order HOT 4
- Refactor metrics names according to standards
- Metrics caching rework
- No json4s release for scala 3 HOT 4
- Add Ox integration: SSE & WebSockets? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sttp.