Skip to content

Commit 471ebdb

Browse files
committed
Add specialized ProducerData classes for Kafka and AMQP
1 parent 07c7690 commit 471ebdb

File tree

14 files changed

+93
-57
lines changed

14 files changed

+93
-57
lines changed

springwolf-core/src/main/java/io/github/stavshamir/springwolf/asyncapi/types/ProducerData.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class ProducerData {
1919
/**
2020
* The name of the channel (topic, queue etc.).
2121
*/
22-
private String channelName;
22+
protected String channelName;
2323

2424
/**
2525
* The channel binding of the producer.
@@ -29,12 +29,12 @@ public class ProducerData {
2929
* ImmutableMap.of("kafka", new KafkaChannelBinding())
3030
* </code>
3131
*/
32-
private Map<String, ? extends ChannelBinding> channelBinding;
32+
protected Map<String, ? extends ChannelBinding> channelBinding;
3333

3434
/**
3535
* The class object of the payload published by this producer.
3636
*/
37-
private Class<?> payloadType;
37+
protected Class<?> payloadType;
3838

3939
/**
4040
* The operation binding of the producer.
@@ -44,6 +44,6 @@ public class ProducerData {
4444
* ImmutableMap.of("kafka", new KafkaOperationBinding())
4545
* </code>
4646
*/
47-
private Map<String, ? extends OperationBinding> operationBinding;
47+
protected Map<String, ? extends OperationBinding> operationBinding;
4848

4949
}

springwolf-examples/springwolf-amqp-example/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77
}
88

99
sourceCompatibility = '1.8'
10-
version '0.2.0'
10+
version '0.3.0'
1111

1212
repositories {
1313
// For local development with snapshots

springwolf-examples/springwolf-amqp-example/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: '3'
22
services:
33
app:
4-
image: stavshamir/springwolf-amqp-example:0.2.0
4+
image: stavshamir/springwolf-amqp-example:0.3.0
55
links:
66
- amqp
77
ports:

springwolf-examples/springwolf-amqp-example/src/main/java/io/github/stavshamir/springwolf/example/configuration/AsyncApiConfiguration.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
11
package io.github.stavshamir.springwolf.example.configuration;
22

3-
import com.asyncapi.v2.binding.amqp.AMQPChannelBinding;
4-
import com.asyncapi.v2.binding.amqp.AMQPOperationBinding;
53
import com.asyncapi.v2.model.info.Info;
64
import com.asyncapi.v2.model.server.Server;
7-
import com.google.common.collect.ImmutableMap;
8-
import io.github.stavshamir.springwolf.asyncapi.types.ProducerData;
5+
import io.github.stavshamir.springwolf.asyncapi.types.AmqpProducerData;
96
import io.github.stavshamir.springwolf.configuration.AsyncApiDocket;
107
import io.github.stavshamir.springwolf.configuration.EnableAsyncApi;
118
import io.github.stavshamir.springwolf.example.dtos.AnotherPayloadDto;
129
import org.springframework.beans.factory.annotation.Value;
1310
import org.springframework.context.annotation.Bean;
1411
import org.springframework.context.annotation.Configuration;
1512

16-
import java.util.Collections;
17-
1813
@Configuration
1914
@EnableAsyncApi
2015
public class AsyncApiConfiguration {
@@ -41,18 +36,11 @@ public AsyncApiDocket asyncApiDocket() {
4136
.url(String.format("%s:%s", amqpHost, amqpPort))
4237
.build();
4338

44-
AMQPChannelBinding.ExchangeProperties exchangeProperties = new AMQPChannelBinding.ExchangeProperties();
45-
exchangeProperties.setName("example-topic-exchange");
46-
ProducerData exampleProducer = ProducerData.builder()
47-
.channelName("example-producer-channel")
48-
.channelBinding(ImmutableMap.of("amqp", AMQPChannelBinding.builder()
49-
.is("routingKey")
50-
.exchange(exchangeProperties)
51-
.build()))
39+
AmqpProducerData exampleProducer = AmqpProducerData.amqpProducerDataBuilder()
40+
.queueName("example-producer-channel")
41+
.exchangeName("example-topic-exchange")
42+
.routingKey("example-topic-routing-key")
5243
.payloadType(AnotherPayloadDto.class)
53-
.operationBinding(ImmutableMap.of("amqp", AMQPOperationBinding.builder()
54-
.cc(Collections.singletonList("example-topic-routing-key"))
55-
.build()))
5644
.build();
5745

5846
return AsyncApiDocket.builder()

springwolf-examples/springwolf-kafka-example/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77
}
88

99
sourceCompatibility = '1.8'
10-
version '0.5.0'
10+
version '0.6.0'
1111

1212

1313
repositories {

springwolf-examples/springwolf-kafka-example/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: '3'
22
services:
33
app:
4-
image: stavshamir/springwolf-kafka-example:0.5.0
4+
image: stavshamir/springwolf-kafka-example:0.6.0
55
links:
66
- kafka
77
environment:

springwolf-examples/springwolf-kafka-example/src/main/java/io/github/stavshamir/springwolf/example/configuration/AsyncApiConfiguration.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package io.github.stavshamir.springwolf.example.configuration;
22

3-
import com.asyncapi.v2.binding.kafka.KafkaOperationBinding;
43
import com.asyncapi.v2.model.info.Info;
54
import com.asyncapi.v2.model.server.Server;
6-
import com.google.common.collect.ImmutableMap;
7-
import io.github.stavshamir.springwolf.asyncapi.types.ProducerData;
5+
import io.github.stavshamir.springwolf.asyncapi.types.KafkaProducerData;
86
import io.github.stavshamir.springwolf.configuration.AsyncApiDocket;
97
import io.github.stavshamir.springwolf.configuration.EnableAsyncApi;
108
import io.github.stavshamir.springwolf.example.dtos.AnotherPayloadDto;
@@ -32,8 +30,15 @@ public AsyncApiDocket asyncApiDocket() {
3230
.title("Springwolf example project")
3331
.build();
3432

35-
ProducerData exampleProducerData = buildKafkaProducerData(PRODUCER_TOPIC, ExamplePayloadDto.class);
36-
ProducerData anotherProducerData = buildKafkaProducerData(PRODUCER_TOPIC, AnotherPayloadDto.class);
33+
KafkaProducerData exampleProducerData = KafkaProducerData.kafkaProducerDataBuilder()
34+
.topicName(PRODUCER_TOPIC)
35+
.payloadType(ExamplePayloadDto.class)
36+
.build();
37+
38+
KafkaProducerData anotherProducerData = KafkaProducerData.kafkaProducerDataBuilder()
39+
.topicName(PRODUCER_TOPIC)
40+
.payloadType(AnotherPayloadDto.class)
41+
.build();
3742

3843
return AsyncApiDocket.builder()
3944
.basePackage("io.github.stavshamir.springwolf.example.consumers")
@@ -44,12 +49,4 @@ public AsyncApiDocket asyncApiDocket() {
4449
.build();
4550
}
4651

47-
private ProducerData buildKafkaProducerData(String topic, Class<?> payload) {
48-
return ProducerData.builder()
49-
.channelName(topic)
50-
.operationBinding(ImmutableMap.of("kafka", new KafkaOperationBinding()))
51-
.payloadType(payload)
52-
.build();
53-
}
54-
5552
}

springwolf-examples/springwolf-kafka-example/src/test/resources/asyncapi.json

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@
1313
},
1414
"channels": {
1515
"another-topic": {
16-
"bindings": {
17-
"kafka": {}
18-
},
1916
"publish": {
2017
"bindings": {
2118
"kafka": {
@@ -34,12 +31,12 @@
3431
"$ref": "#/components/schemas/AnotherPayloadDto"
3532
}
3633
}
34+
},
35+
"bindings": {
36+
"kafka": {}
3737
}
3838
},
3939
"example-topic": {
40-
"bindings": {
41-
"kafka": {}
42-
},
4340
"publish": {
4441
"bindings": {
4542
"kafka": {}
@@ -51,13 +48,13 @@
5148
"$ref": "#/components/schemas/ExamplePayloadDto"
5249
}
5350
}
54-
}
55-
},
56-
"multi-payload-topic": {
51+
},
5752
"bindings": {
5853
"kafka": {}
59-
},
60-
"publish": {
54+
}
55+
},
56+
"example-producer-topic": {
57+
"subscribe": {
6158
"bindings": {
6259
"kafka": {}
6360
},
@@ -79,10 +76,13 @@
7976
}
8077
]
8178
}
79+
},
80+
"bindings": {
81+
"kafka": {}
8282
}
8383
},
84-
"example-producer-topic": {
85-
"subscribe": {
84+
"multi-payload-topic": {
85+
"publish": {
8686
"bindings": {
8787
"kafka": {}
8888
},
@@ -104,6 +104,9 @@
104104
}
105105
]
106106
}
107+
},
108+
"bindings": {
109+
"kafka": {}
107110
}
108111
}
109112
},
@@ -156,4 +159,4 @@
156159
}
157160
}
158161
}
159-
}
162+
}

springwolf-plugins/springwolf-amqp-plugin/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ Add the following dependencies and configuration class to enable this plugin.
2424
```groovy
2525
dependencies {
2626
// Provides the documentation API
27-
implementation 'io.github.springwolf:springwolf-amqp:0.2.0'
27+
implementation 'io.github.springwolf:springwolf-amqp:0.3.0'
2828
2929
// Provides the UI - optional (recommended)
30-
runtimeOnly 'io.github.springwolf:springwolf-ui:0.3.1'
30+
runtimeOnly 'io.github.springwolf:springwolf-ui:0.4.0'
3131
}
3232
```
3333

springwolf-plugins/springwolf-amqp-plugin/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
}
1010

1111
group 'io.github.springwolf'
12-
version '0.2.0'
12+
version '0.3.0'
1313
sourceCompatibility = 1.8
1414

1515
repositories {

0 commit comments

Comments
 (0)