@@ -36,12 +36,12 @@ import dev.profunktor.fs2rabbit.model.RabbitConnection
36
36
import java .util .Collections
37
37
import java .util .concurrent .AbstractExecutorService
38
38
import java .util .concurrent .ExecutorService
39
- import java .util .concurrent .Executors
40
39
import java .util .concurrent .ThreadFactory
41
40
import java .util .concurrent .TimeUnit
42
41
import javax .net .ssl .SSLContext
43
42
import scala .concurrent .ExecutionContext
44
43
import scala .jdk .CollectionConverters ._
44
+ import java .util .concurrent .Executors
45
45
46
46
object ConnectionResource {
47
47
type ConnectionResource [F [_]] = Connection [Resource [F , * ]]
@@ -63,20 +63,28 @@ object ConnectionResource {
63
63
}
64
64
}
65
65
66
- val numOfThreads = Runtime .getRuntime().availableProcessors() * 2
67
- val es = Executors .newFixedThreadPool(numOfThreads)
68
- sys.addShutdownHook(es.shutdown())
66
+ val numOfThreads = Runtime .getRuntime().availableProcessors() * 2
67
+ val esF : F [ExecutorService ] = threadFactory
68
+ .fold(Executors .newFixedThreadPool(numOfThreads).pure[F ]) {
69
+ _.map(Executors .newFixedThreadPool(numOfThreads, _))
70
+ }
71
+ .map { es =>
72
+ sys.addShutdownHook(es.shutdown())
73
+ es
74
+ }
69
75
70
- addThreadFactory.flatMap { fn =>
71
- _make(
72
- conf,
73
- Some (ExecutionContext .fromExecutorService(es)),
74
- sslCtx,
75
- saslConf,
76
- metricsCollector,
77
- fn
78
- )
79
- }
76
+ for {
77
+ es <- esF
78
+ fn <- addThreadFactory
79
+ conn <- _make(
80
+ conf,
81
+ Some (ExecutionContext .fromExecutorService(es)),
82
+ sslCtx,
83
+ saslConf,
84
+ metricsCollector,
85
+ fn
86
+ )
87
+ } yield conn
80
88
}
81
89
82
90
def make [F [_]: Sync : Log ](
0 commit comments