Skip to content

Commit d1b58cd

Browse files
authored
add copy method to rabbitclient builder (#705)
* add copy method to rabbitclient builder
1 parent 2ae3814 commit d1b58cd

File tree

10 files changed

+36
-51
lines changed

10 files changed

+36
-51
lines changed

build.sbt

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ val commonSettings = List(
6464
libraryDependencies ++= commonDependencies(scalaVersion.value),
6565
resolvers += "Apache public" at "https://repository.apache.org/content/groups/public/",
6666
scalafmtOnCompile := true,
67-
mimaPreviousArtifacts := Set(organization.value %% moduleName.value % "4.1.0")
67+
mimaPreviousArtifacts := Set(organization.value %% moduleName.value % "4.1.1")
6868
)
6969

7070
def CoreDependencies(scalaVersionStr: String): List[ModuleID] =

core/src/main/scala/dev/profunktor/fs2rabbit/interpreter/RabbitClient.scala

+17-35
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,14 @@ object RabbitClient {
9494
threadFactory: Option[F[ThreadFactory]],
9595
executionContext: Option[F[ExecutionContext]]
9696
) {
97-
def withSslContext(sslContext: SSLContext): Builder[F] = new Builder[F](
98-
config = config,
99-
sslContext = Some(sslContext),
100-
saslConfig = saslConfig,
101-
metricsCollector = metricsCollector,
102-
threadFactory = threadFactory,
103-
executionContext = executionContext
104-
) {}
105-
106-
def withSaslConfig(saslConfig: SaslConfig): Builder[F] = new Builder[F](
97+
private def copy(
98+
config: Fs2RabbitConfig = config,
99+
sslContext: Option[SSLContext] = sslContext,
100+
saslConfig: SaslConfig = saslConfig,
101+
metricsCollector: Option[MetricsCollector] = metricsCollector,
102+
threadFactory: Option[F[ThreadFactory]] = threadFactory,
103+
executionContext: Option[F[ExecutionContext]] = executionContext
104+
): Builder[F] = new Builder[F](
107105
config = config,
108106
sslContext = sslContext,
109107
saslConfig = saslConfig,
@@ -112,38 +110,22 @@ object RabbitClient {
112110
executionContext = executionContext
113111
) {}
114112

115-
def withMetricsCollector(metricsCollector: MetricsCollector): Builder[F] = new Builder[F](
116-
config = config,
117-
sslContext = sslContext,
118-
saslConfig = saslConfig,
119-
metricsCollector = Some(metricsCollector),
120-
threadFactory = threadFactory,
121-
executionContext = executionContext
122-
) {}
113+
def withSslContext(sslContext: SSLContext): Builder[F] = copy(sslContext = Some(sslContext))
123114

124-
def withThreadFactory(threadFactory: F[ThreadFactory]): Builder[F] = new Builder[F](
125-
config = config,
126-
sslContext = sslContext,
127-
saslConfig = saslConfig,
128-
metricsCollector = metricsCollector,
129-
threadFactory = Some(threadFactory),
130-
executionContext = executionContext
131-
) {}
115+
def withSaslConfig(saslConfig: SaslConfig): Builder[F] = copy(saslConfig = saslConfig)
116+
117+
def withMetricsCollector(metricsCollector: MetricsCollector): Builder[F] =
118+
copy(metricsCollector = Some(metricsCollector))
119+
120+
def withThreadFactory(threadFactory: F[ThreadFactory]): Builder[F] = copy(threadFactory = Some(threadFactory))
132121

133122
def withExecutionContext(executionContext: F[ExecutionContext]): Builder[F] =
134-
new Builder[F](
135-
config = config,
136-
sslContext = sslContext,
137-
saslConfig = saslConfig,
138-
metricsCollector = metricsCollector,
139-
threadFactory = threadFactory,
140-
executionContext = Some(executionContext)
141-
) {}
123+
copy(executionContext = Some(executionContext))
142124

143125
def build(dispatcher: Dispatcher[F]): F[RabbitClient[F]] =
144126
create[F](config, dispatcher, sslContext, saslConfig, metricsCollector, threadFactory, executionContext)
145127

146-
def resource(): Resource[F, RabbitClient[F]] =
128+
def resource: Resource[F, RabbitClient[F]] =
147129
Dispatcher[F].evalMap(build)
148130
}
149131

examples/src/main/scala/dev/profunktor/fs2rabbit/examples/DropwizardMetricsDemo.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ object DropwizardMetricsDemo extends IOApp.Simple {
6868

6969
val resources = for {
7070
_ <- JmxReporterResource.make[IO](registry)
71-
client <- RabbitClient.default[IO](config).withMetricsCollector(dropwizardCollector).resource()
71+
client <- RabbitClient.default[IO](config).withMetricsCollector(dropwizardCollector).resource
7272
channel <- client.createConnection.flatMap(client.createChannel)
7373
} yield (channel, client)
7474

examples/src/main/scala/dev/profunktor/fs2rabbit/examples/IOAckerConsumer.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ object IOAckerConsumer extends IOApp.Simple {
4242
)
4343

4444
override def run: IO[Unit] =
45-
RabbitClient.default[IO](config).resource().use { client =>
45+
RabbitClient.default[IO](config).resource.use { client =>
4646
ResilientStream
4747
.runF(new AckerConsumerDemo[IO](client).program)
4848
}

examples/src/main/scala/dev/profunktor/fs2rabbit/examples/RPCDemo.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ object RPCDemo extends IOApp.Simple {
5454
)
5555

5656
def run: IO[Unit] =
57-
RabbitClient.default[IO](config).resource().use { implicit client =>
57+
RabbitClient.default[IO](config).resource.use { implicit client =>
5858
val queue = QueueName("rpc_queue")
5959
runServer[IO](queue).concurrently(runClient[IO](queue)).compile.drain
6060
}

examples/src/main/scala/dev/profunktor/fs2rabbit/examples/ZIOAutoAckConsumer.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ object ZIOAutoAckConsumer extends CatsApp {
4343
override def run(args: List[String]): URIO[ZEnv, ExitCode] =
4444
RabbitClient
4545
.default[Task](config)
46-
.resource()
46+
.resource
4747
.use { client =>
4848
ResilientStream
4949
.runF(new AutoAckConsumerDemo[Task](client).program)

site/docs/config.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ val config = Fs2RabbitConfig(
3030
requeueOnReject = false,
3131
internalQueueSize = Some(500),
3232
requestedHeartbeat = 30.seconds,
33-
automaticRecovery = true
33+
automaticRecovery = true,
34+
clientProvidedConnectionName = Some("app:rabbit")
3435
)
3536
```
3637

site/docs/examples/client-metrics.md

+5-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ val dropwizardCollector = new StandardMetricsCollector(registry)
1717
Now it is ready to use.
1818

1919
```scala
20-
RabbitClient.default[IO](config).withMetricsCollector(dropwizardCollector).resource()
20+
RabbitClient.default[IO](config).withMetricsCollector(dropwizardCollector).resource
2121
```
2222

2323
## Expose via JMX
@@ -54,7 +54,7 @@ Let's initialise the FS2 RabbitMQ client and AMQP channel with metrics.
5454
```scala
5555
val resources = for {
5656
_ <- JmxReporterResource.make[IO](registry)
57-
client <- RabbitClient.default[IO](config).withMetricsCollector(dropwizardCollector).resource()
57+
client <- RabbitClient.default[IO](config).withMetricsCollector(dropwizardCollector).resource
5858
channel <- client.createConnection.flatMap(client.createChannel)
5959
} yield (channel, client)
6060

@@ -109,7 +109,8 @@ object DropwizardMetricsDemo extends IOApp {
109109
requeueOnReject = false,
110110
internalQueueSize = Some(500),
111111
requestedHeartbeat = 60.seconds,
112-
automaticRecovery = true
112+
automaticRecovery = true,
113+
clientProvidedConnectionName = Some("app:rabbit")
113114
)
114115

115116
private val queueName = QueueName("testQ")
@@ -129,7 +130,7 @@ object DropwizardMetricsDemo extends IOApp {
129130

130131
val resources = for {
131132
_ <- JmxReporterResource.make[IO](registry)
132-
client <- RabbitClient.default[IO](config).withMetricsCollector(dropwizardCollector).resource()
133+
client <- RabbitClient.default[IO](config).withMetricsCollector(dropwizardCollector).resource
133134
channel <- client.createConnection.flatMap(client.createChannel)
134135
} yield (channel, client)
135136

site/docs/examples/sample-acker.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,12 @@ object IOAckerConsumer extends IOApp {
117117
requeueOnReject = false,
118118
internalQueueSize = Some(500),
119119
requestedHeartbeat = 60.seconds,
120-
automaticRecovery = true
120+
automaticRecovery = true,
121+
clientProvidedConnectionName = Some("app:rabbit")
121122
)
122123

123124
override def run(args: List[String]): IO[ExitCode] =
124-
RabbitClient.default[IO](config).resource().use { client =>
125+
RabbitClient.default[IO](config).resource.use { client =>
125126
ResilientStream
126127
.runF(new AckerConsumerDemo[IO](client).program)
127128
.as(ExitCode.Success)

tests/src/test/scala/dev/profunktor/fs2rabbit/interpreter/Fs2RabbitSpec.scala

+4-4
Original file line numberDiff line numberDiff line change
@@ -757,31 +757,31 @@ trait Fs2RabbitSpec { self: BaseSpec =>
757757
private def withStreamRabbit[A](fa: RabbitClient[IO] => Stream[IO, A]): Future[Assertion] =
758758
RabbitClient
759759
.default[IO](config)
760-
.resource()
760+
.resource
761761
.use(r => fa(r).compile.drain)
762762
.as(emptyAssertion)
763763
.unsafeToFuture()
764764

765765
private def withStreamNackRabbit[A](fa: RabbitClient[IO] => Stream[IO, A]): Future[Assertion] =
766766
RabbitClient
767767
.default[IO](config.copy(requeueOnNack = true))
768-
.resource()
768+
.resource
769769
.use(r => fa(r).compile.drain)
770770
.as(emptyAssertion)
771771
.unsafeToFuture()
772772

773773
private def withStreamRejectRabbit[A](fa: RabbitClient[IO] => Stream[IO, A]): Future[Assertion] =
774774
RabbitClient
775775
.default[IO](config.copy(requeueOnReject = true))
776-
.resource()
776+
.resource
777777
.use(r => fa(r).compile.drain)
778778
.as(emptyAssertion)
779779
.unsafeToFuture()
780780

781781
private def withRabbit[A](fa: RabbitClient[IO] => IO[A]): Future[A] =
782782
RabbitClient
783783
.default[IO](config)
784-
.resource()
784+
.resource
785785
.use(r => fa(r))
786786
.unsafeToFuture()
787787

0 commit comments

Comments
 (0)