Skip to content

Commit ed97d62

Browse files
committed
Playground with rabbitmq
docker run -d --hostname rabbit-mq-node --name rabbit-mq-instance -p 15672:15672 -p 5672:5672 rabbitmq:3-management
1 parent 27f8e8e commit ed97d62

File tree

5 files changed

+99
-2
lines changed

5 files changed

+99
-2
lines changed

kotlin-jvm/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ dependencies {
3030
implementation("com.github.kittinunf.fuel:fuel:_")
3131
implementation("com.github.kittinunf.fuel:fuel-kotlinx-serialization:_")
3232
implementation("com.h2database:h2:_")
33+
implementation("com.rabbitmq:amqp-client:_")
3334
implementation("com.sksamuel.hoplite:hoplite-core:_")
3435
implementation("com.sksamuel.hoplite:hoplite-hocon:_")
3536
implementation("com.sksamuel.hoplite:hoplite-yaml:_")

kotlin-jvm/src/main/kotlin/playground/Konf.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private fun Config.printConfig() {
6868
Credentials:
6969
- username: ${this[CredentialsSpec.username]}
7070
- password: ${this[CredentialsSpec.password]}
71-
71+
7272
Server:
7373
- domain: ${this[ServerSpec.domain]}
7474
- protocol: ${this[ServerSpec.protocol]}
@@ -90,4 +90,4 @@ enum class ServerProtocol {
9090
HTTP, HTTPS
9191
}
9292

93-
private const val configPath = "configuration"
93+
private const val configPath = "configuration"
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
@file:Suppress("PackageDirectoryMismatch")
2+
3+
package playground.rabbitmq.client
4+
5+
import com.rabbitmq.client.CancelCallback
6+
import com.rabbitmq.client.Channel
7+
import com.rabbitmq.client.ConnectionFactory
8+
import com.rabbitmq.client.DeliverCallback
9+
import com.rabbitmq.client.Delivery
10+
import com.uchuhimo.konf.Config
11+
import playground.rabbitmq.producer.AmqpSpec
12+
import java.nio.charset.StandardCharsets
13+
14+
fun main() {
15+
println()
16+
println("# rabbitmq")
17+
18+
val config = Config {
19+
addSpec(AmqpSpec)
20+
}
21+
val spec = config.from.env()
22+
println(spec)
23+
val factory = ConnectionFactory()
24+
factory.newConnection(spec[AmqpSpec.url]).use { connection ->
25+
connection.createChannel().use { channel ->
26+
consumeMessage(channel, spec[AmqpSpec.queue])
27+
}
28+
}
29+
}
30+
31+
fun consumeMessage(channel: Channel, queueName: String) {
32+
val consumerTag = "SimpleConsumer"
33+
34+
channel.queueDeclare(queueName, false, false, false, null)
35+
36+
println("[$consumerTag] Waiting for messages...")
37+
val deliverCallback = DeliverCallback { consumerTag: String?, delivery: Delivery ->
38+
val message = String(delivery.body, StandardCharsets.UTF_8)
39+
println("[$consumerTag] Received message: '$message'")
40+
}
41+
val cancelCallback = CancelCallback { consumerTag: String? ->
42+
println("[$consumerTag] was canceled")
43+
}
44+
45+
channel.basicConsume(queueName, true, consumerTag, deliverCallback, cancelCallback)
46+
47+
}
48+
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
@file:Suppress("PackageDirectoryMismatch")
2+
3+
package playground.rabbitmq.producer
4+
5+
import com.rabbitmq.client.ConnectionFactory
6+
import com.uchuhimo.konf.Config
7+
import com.uchuhimo.konf.ConfigSpec
8+
import java.nio.charset.StandardCharsets
9+
10+
fun main() {
11+
println()
12+
println("# rabbitmq producer")
13+
14+
val config = Config {
15+
addSpec(AmqpSpec)
16+
}
17+
val spec = config.from.env()
18+
println(spec)
19+
val factory = ConnectionFactory()
20+
factory.newConnection(spec[AmqpSpec.url]).use { connection ->
21+
connection.createChannel().use { channel ->
22+
channel.queueDeclare(spec[AmqpSpec.queue], false, false, false, null)
23+
val message = "Hello World!"
24+
channel.basicPublish(
25+
"",
26+
spec[AmqpSpec.queue],
27+
null,
28+
message.toByteArray(StandardCharsets.UTF_8)
29+
)
30+
println(" [x] Sent '$message'")
31+
}
32+
}
33+
}
34+
35+
object AmqpSpec : ConfigSpec() {
36+
val url by required<String>()
37+
val queue by required<String>()
38+
}

versions.properties

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ version.com.jakewharton.retrofit..retrofit2-kotlinx-serialization-converter=0.8.
129129

130130
version.com.nhaarman.mockitokotlin2..mockito-kotlin=2.2.0
131131

132+
version.com.rabbitmq..amqp-client=5.12.0
133+
132134
version.com.sksamuel.hoplite..hoplite-core=1.4.0
133135
## # available=1.4.1
134136

@@ -146,16 +148,24 @@ version.google.android.material=1.3.0
146148
## # available=1.4.0-alpha01
147149
## # available=1.4.0-alpha02
148150
## # available=1.4.0-beta01
151+
149152
version.google.dagger=2.35.1
150153
## # available=2.36
154+
151155
version.io.github.lucapiccinelli..konad=1.2.1
156+
152157
version.io.github.serpro69..kotlin-faker=1.7.1
153158
## # available=1.8.0-rc.0
159+
154160
version.io.konform..konform=0.3.0
161+
155162
version.it.skrape..skrapeit-core=1.0.0-alpha8
163+
156164
version.it.skrape..skrapeit-http-fetcher=1.1.1
165+
157166
version.junit=5.7.2
158167
### available=5.8.0-M1
168+
159169
version.junit.junit=4.13.2
160170

161171
version.kotest=4.4.3

0 commit comments

Comments
 (0)