refactor: expose kafka sink configuration
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
- Existing handler currently writes report ACK before `dispatcher.dispatch(rf)`.
|
||||
- Existing `DisruptorEventBus` publishes to sinks asynchronously and does not wait for sink completion.
|
||||
- Existing `KafkaEventSink.accepts()` rejects `VehicleEvent.RawArchive`.
|
||||
- Existing versioned topic names are not yet present; current topic names live under `lingniu.ingest.sink.mq.topics`.
|
||||
- Existing versioned topic names are not yet present; current topic names live under `lingniu.ingest.sink.kafka.topics`.
|
||||
- Existing history consumer logic: `modules/services/event-history-service/src/main/java/com/lingniu/ingest/eventhistory/EventHistoryEnvelopeIngestor.java`.
|
||||
- Existing analytics consumers: `VehicleStateEnvelopeIngestor` and `VehicleStatEnvelopeIngestor`.
|
||||
- There is an unrelated working-tree change in `modules/apps/bootstrap-all/src/main/resources/application.yml` for GB32960 diagnostics capacity. Do not revert it. Do not include it in service-split commits unless the user explicitly asks.
|
||||
@@ -48,7 +48,7 @@ Create app modules:
|
||||
Modify shared build and Kafka contract files:
|
||||
|
||||
- `pom.xml`
|
||||
- `modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/SinkMqProperties.java`
|
||||
- `modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/KafkaSinkProperties.java`
|
||||
- `modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/TopicRouter.java`
|
||||
- `modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/KafkaEventSink.java`
|
||||
- `modules/sinks/sink-mq/src/test/java/com/lingniu/ingest/sink/mq/TopicRouterTest.java`
|
||||
@@ -466,16 +466,19 @@ lingniu:
|
||||
rate-limit:
|
||||
per-vin-qps: 50
|
||||
session:
|
||||
store: ${SESSION_STORE:memory}
|
||||
store: ${SESSION_STORE:redis}
|
||||
ttl: ${SESSION_TTL:30m}
|
||||
identity:
|
||||
store: ${VEHICLE_IDENTITY_STORE:file}
|
||||
file:
|
||||
path: ${VEHICLE_IDENTITY_FILE:./data/vehicle-identity.jsonl}
|
||||
store: ${VEHICLE_IDENTITY_STORE:mysql}
|
||||
mysql:
|
||||
jdbc-url: ${VEHICLE_IDENTITY_MYSQL_JDBC_URL:jdbc:mysql://127.0.0.1:3306/lingniu_vehicle?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai}
|
||||
username: ${VEHICLE_IDENTITY_MYSQL_USERNAME:root}
|
||||
password: ${VEHICLE_IDENTITY_MYSQL_PASSWORD:}
|
||||
table-name: ${VEHICLE_IDENTITY_MYSQL_TABLE:vehicle_identity_bindings}
|
||||
initialize-schema: ${VEHICLE_IDENTITY_MYSQL_INITIALIZE_SCHEMA:true}
|
||||
sink:
|
||||
mq:
|
||||
kafka:
|
||||
enabled: ${KAFKA_ENABLED:true}
|
||||
type: kafka
|
||||
bootstrap-servers: ${KAFKA_BROKERS:114.55.58.251:9092}
|
||||
compression-type: zstd
|
||||
linger-ms: 20
|
||||
@@ -568,9 +571,8 @@ lingniu:
|
||||
gb32960:
|
||||
enabled: false
|
||||
sink:
|
||||
mq:
|
||||
kafka:
|
||||
enabled: ${KAFKA_ENABLED:true}
|
||||
type: kafka
|
||||
bootstrap-servers: ${KAFKA_BROKERS:114.55.58.251:9092}
|
||||
topics:
|
||||
realtime: ${KAFKA_TOPIC_GB32960_EVENT:vehicle.event.gb32960.v1}
|
||||
@@ -666,9 +668,8 @@ lingniu:
|
||||
gb32960:
|
||||
enabled: false
|
||||
sink:
|
||||
mq:
|
||||
kafka:
|
||||
enabled: ${KAFKA_ENABLED:true}
|
||||
type: kafka
|
||||
bootstrap-servers: ${KAFKA_BROKERS:114.55.58.251:9092}
|
||||
topics:
|
||||
realtime: ${KAFKA_TOPIC_GB32960_EVENT:vehicle.event.gb32960.v1}
|
||||
@@ -754,7 +755,7 @@ import com.lingniu.ingest.eventfilestore.EventFileStore;
|
||||
import com.lingniu.ingest.protocol.gb32960.config.Gb32960AutoConfiguration;
|
||||
import com.lingniu.ingest.protocol.gb32960.inbound.Gb32960NettyServer;
|
||||
import com.lingniu.ingest.sink.archive.ArchiveStore;
|
||||
import com.lingniu.ingest.sink.mq.KafkaEventSink;
|
||||
import com.lingniu.ingest.sink.kafka.KafkaEventSink;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
@@ -770,7 +771,7 @@ class Gb32960IngestAppCompositionTest {
|
||||
.withPropertyValues(
|
||||
"lingniu.ingest.gb32960.enabled=true",
|
||||
"lingniu.ingest.gb32960.port=0",
|
||||
"lingniu.ingest.sink.mq.enabled=false",
|
||||
"lingniu.ingest.sink.kafka.enabled=false",
|
||||
"lingniu.ingest.sink.archive.enabled=false",
|
||||
"lingniu.ingest.event-file-store.enabled=false",
|
||||
"lingniu.ingest.event-history.enabled=false",
|
||||
@@ -835,7 +836,7 @@ class VehicleHistoryAppCompositionTest {
|
||||
"lingniu.ingest.event-history.enabled=true",
|
||||
"lingniu.ingest.vehicle-state.enabled=false",
|
||||
"lingniu.ingest.vehicle-stat.enabled=false",
|
||||
"lingniu.ingest.sink.mq.enabled=false")
|
||||
"lingniu.ingest.sink.kafka.enabled=false")
|
||||
.withConfiguration(AutoConfigurations.of(
|
||||
com.lingniu.ingest.sink.archive.config.SinkArchiveAutoConfiguration.class,
|
||||
com.lingniu.ingest.eventfilestore.config.EventFileStoreAutoConfiguration.class,
|
||||
@@ -896,7 +897,7 @@ class VehicleAnalyticsAppCompositionTest {
|
||||
"lingniu.ingest.vehicle-state.enabled=false",
|
||||
"lingniu.ingest.vehicle-stat.enabled=true",
|
||||
"lingniu.ingest.vehicle-stat.file-path=" + tempDir.resolve("vehicle-stat"),
|
||||
"lingniu.ingest.sink.mq.enabled=false")
|
||||
"lingniu.ingest.sink.kafka.enabled=false")
|
||||
.withConfiguration(AutoConfigurations.of(
|
||||
com.lingniu.ingest.vehiclestat.config.VehicleStatAutoConfiguration.class,
|
||||
com.lingniu.ingest.vehiclestate.config.VehicleStateAutoConfiguration.class))
|
||||
@@ -932,7 +933,7 @@ git commit -m "test: cover split service composition"
|
||||
### Task 4: Version Kafka Topics for GB32960 Raw/Event/DLQ
|
||||
|
||||
**Files:**
|
||||
- Modify: `modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/SinkMqProperties.java`
|
||||
- Modify: `modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/KafkaSinkProperties.java`
|
||||
- Modify: `modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/TopicRouter.java`
|
||||
- Modify: `modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/KafkaEventSink.java`
|
||||
- Create or modify: `modules/sinks/sink-mq/src/test/java/com/lingniu/ingest/sink/mq/TopicRouterTest.java`
|
||||
@@ -947,7 +948,7 @@ Expected test names:
|
||||
```java
|
||||
@Test
|
||||
void rawArchiveRoutesToVersionedGb32960RawTopic() {
|
||||
SinkMqProperties.Topics topics = new SinkMqProperties.Topics();
|
||||
KafkaSinkProperties.Topics topics = new KafkaSinkProperties.Topics();
|
||||
topics.setRawArchive("vehicle.raw.gb32960.v1");
|
||||
TopicRouter router = new TopicRouter(topics);
|
||||
|
||||
@@ -970,7 +971,7 @@ Also add a normalized realtime event test:
|
||||
```java
|
||||
@Test
|
||||
void realtimeRoutesToVersionedGb32960EventTopic() {
|
||||
SinkMqProperties.Topics topics = new SinkMqProperties.Topics();
|
||||
KafkaSinkProperties.Topics topics = new KafkaSinkProperties.Topics();
|
||||
topics.setRealtime("vehicle.event.gb32960.v1");
|
||||
TopicRouter router = new TopicRouter(topics);
|
||||
|
||||
@@ -1000,9 +1001,9 @@ mvn -pl :sink-mq -Dtest=TopicRouterTest test
|
||||
|
||||
Expected before implementation: compile failure if constructors are wrong or assertion failure if defaults are old. Fix constructors first; keep routing assertions.
|
||||
|
||||
- [ ] **Step 3: Update `SinkMqProperties.Topics` defaults**
|
||||
- [ ] **Step 3: Update `KafkaSinkProperties.Topics` defaults**
|
||||
|
||||
In `SinkMqProperties.Topics`, change defaults:
|
||||
In `KafkaSinkProperties.Topics`, change defaults:
|
||||
|
||||
```java
|
||||
private String realtime = "vehicle.event.gb32960.v1";
|
||||
@@ -1040,7 +1041,7 @@ Expected: PASS.
|
||||
- [ ] **Step 6: Commit**
|
||||
|
||||
```bash
|
||||
git add modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/SinkMqProperties.java \
|
||||
git add modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/KafkaSinkProperties.java \
|
||||
modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/TopicRouter.java \
|
||||
modules/sinks/sink-mq/src/main/java/com/lingniu/ingest/sink/mq/KafkaEventSink.java \
|
||||
modules/sinks/sink-mq/src/test/java/com/lingniu/ingest/sink/mq/TopicRouterTest.java \
|
||||
@@ -1353,8 +1354,8 @@ void gb32960IngestDefaultsOnlyEnableProtocolAndKafkaProducer() {
|
||||
assertThat(props.getProperty("spring.application.name")).isEqualTo("gb32960-ingest-app");
|
||||
assertThat(props.getProperty("lingniu.ingest.gb32960.enabled")).isEqualTo("true");
|
||||
assertThat(props.getProperty("lingniu.ingest.gb32960.port")).isEqualTo("${GB32960_PORT:32960}");
|
||||
assertThat(props.getProperty("lingniu.ingest.sink.mq.enabled")).isEqualTo("${KAFKA_ENABLED:true}");
|
||||
assertThat(props.getProperty("lingniu.ingest.sink.mq.consumer.enabled")).isEqualTo("false");
|
||||
assertThat(props.getProperty("lingniu.ingest.sink.kafka.enabled")).isEqualTo("${KAFKA_ENABLED:true}");
|
||||
assertThat(props.getProperty("lingniu.ingest.sink.kafka.consumer.enabled")).isEqualTo("false");
|
||||
assertThat(props.getProperty("lingniu.ingest.event-file-store.enabled")).isEqualTo("false");
|
||||
assertThat(props.getProperty("lingniu.ingest.event-history.enabled")).isEqualTo("false");
|
||||
assertThat(props.getProperty("lingniu.ingest.vehicle-state.enabled")).isEqualTo("false");
|
||||
@@ -1378,7 +1379,7 @@ void historyDefaultsEnableStorageAndHistoryConsumerOnly() {
|
||||
assertThat(props.getProperty("lingniu.ingest.event-history.enabled")).isEqualTo("true");
|
||||
assertThat(props.getProperty("lingniu.ingest.vehicle-state.enabled")).isEqualTo("false");
|
||||
assertThat(props.getProperty("lingniu.ingest.vehicle-stat.enabled")).isEqualTo("false");
|
||||
assertThat(props.getProperty("lingniu.ingest.sink.mq.consumer.bindings.eventHistoryEnvelopeConsumerProcessor.group-id"))
|
||||
assertThat(props.getProperty("lingniu.ingest.sink.kafka.consumer.bindings.eventHistoryEnvelopeConsumerProcessor.group-id"))
|
||||
.isEqualTo("${KAFKA_GROUP_HISTORY:vehicle-history}");
|
||||
}
|
||||
```
|
||||
@@ -1398,7 +1399,7 @@ void analyticsDefaultsEnableStatConsumerAndDisableProtocolAndHistoryStorage() {
|
||||
assertThat(props.getProperty("lingniu.ingest.event-file-store.enabled")).isEqualTo("false");
|
||||
assertThat(props.getProperty("lingniu.ingest.event-history.enabled")).isEqualTo("false");
|
||||
assertThat(props.getProperty("lingniu.ingest.vehicle-stat.enabled")).isEqualTo("${VEHICLE_STAT_ENABLED:true}");
|
||||
assertThat(props.getProperty("lingniu.ingest.sink.mq.consumer.bindings.vehicleStatEnvelopeConsumerProcessor.group-id"))
|
||||
assertThat(props.getProperty("lingniu.ingest.sink.kafka.consumer.bindings.vehicleStatEnvelopeConsumerProcessor.group-id"))
|
||||
.isEqualTo("${KAFKA_GROUP_STAT:vehicle-stat}");
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user