Skip to content

Commit 5a0ce5e

Browse files
committed
All producers are now closed on JVM exit.
1 parent b66e845 commit 5a0ce5e

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# scalatest-embedded-kafka
2-
A library that provides an in-memory Kafka broker to run your ScalaTest specs against. It uses Kafka 0.8.2.1 and ZooKeeper 3.4.6.
2+
A library that provides an in-memory Kafka broker to run your ScalaTest specs against. It uses Kafka 0.8.2.2 and ZooKeeper 3.4.6.
33

44
Inspired by https://github.com/chbatey/kafka-unit
55

66
## How to use
77

88
scalatest-embedded-kafka is available on Bintray and Maven Central, compiled for both Scala 2.10 and 2.11
99

10-
* In your `build.sbt` file add the following dependency: `"net.manub" %% "scalatest-embedded-kafka" % "0.3.0" % "test"`
10+
* In your `build.sbt` file add the following dependency: `"net.manub" %% "scalatest-embedded-kafka" % "0.4.1" % "test"`
1111
* Have your `Spec` extend the `EmbeddedKafka` trait.
1212
* Enclose the code that needs a running instance of Kafka within the `withRunningKafka` closure.
1313

src/main/scala/net/manub/embeddedkafka/EmbeddedKafka.scala

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,26 @@ sealed trait EmbeddedKafkaSupport {
161161
}
162162

163163
object aKafkaProducer {
164+
private[this] var producers = Vector.empty[KafkaProducer[_, _]]
165+
166+
sys.addShutdownHook {
167+
producers.foreach(_.close())
168+
}
169+
164170
def thatSerializesValuesWith[V](serializer: Class[_ <: Serializer[V]])(implicit config: EmbeddedKafkaConfig) = {
165-
new KafkaProducer[String, V](basicKafkaConfig(config) +(
171+
val producer = new KafkaProducer[String, V](basicKafkaConfig(config) + (
166172
ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG -> classOf[StringSerializer].getName,
167-
ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG -> serializer.getName))
173+
ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG -> serializer.getName)
174+
)
175+
producers :+= producer
176+
producer
168177
}
169178

170-
def apply[V](implicit valueSerializer: Serializer[V], config: EmbeddedKafkaConfig) =
171-
new KafkaProducer[String, V](basicKafkaConfig(config), new StringSerializer, valueSerializer)
179+
def apply[V](implicit valueSerializer: Serializer[V], config: EmbeddedKafkaConfig) = {
180+
val producer = new KafkaProducer[String, V](basicKafkaConfig(config), new StringSerializer, valueSerializer)
181+
producers :+= producer
182+
producer
183+
}
172184

173185
def basicKafkaConfig[V](config: EmbeddedKafkaConfig): Map[String, String] = Map(
174186
ProducerConfig.BOOTSTRAP_SERVERS_CONFIG -> s"localhost:${config.kafkaPort}",

version.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version in ThisBuild := "0.5.0-SNAPSHOT"
1+
version in ThisBuild := "0.4.1-SNAPSHOT"

0 commit comments

Comments
 (0)