diff --git a/modules/apps/gb32960-ingest-app/pom.xml b/modules/apps/gb32960-ingest-app/pom.xml
index e12ca9f8..65b80f2e 100644
--- a/modules/apps/gb32960-ingest-app/pom.xml
+++ b/modules/apps/gb32960-ingest-app/pom.xml
@@ -46,5 +46,21 @@
gb32960-ingest-app
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ --sun-misc-unsafe-memory-access=allow
+
+
+
+
+ repackage
+
+
+
+
+
diff --git a/modules/apps/gb32960-ingest-app/src/main/java/com/lingniu/ingest/gb32960app/Gb32960IngestApplication.java b/modules/apps/gb32960-ingest-app/src/main/java/com/lingniu/ingest/gb32960app/Gb32960IngestApplication.java
new file mode 100644
index 00000000..93433641
--- /dev/null
+++ b/modules/apps/gb32960-ingest-app/src/main/java/com/lingniu/ingest/gb32960app/Gb32960IngestApplication.java
@@ -0,0 +1,21 @@
+package com.lingniu.ingest.gb32960app;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication(scanBasePackages = "com.lingniu.ingest")
+public class Gb32960IngestApplication {
+
+ private static final Logger log = LoggerFactory.getLogger(Gb32960IngestApplication.class);
+
+ public static void main(String[] args) {
+ try {
+ SpringApplication.run(Gb32960IngestApplication.class, args);
+ } catch (Throwable t) {
+ log.error("GB32960 ingest application failed to start, forcing JVM exit", t);
+ System.exit(1);
+ }
+ }
+}
diff --git a/modules/apps/gb32960-ingest-app/src/main/resources/application.yml b/modules/apps/gb32960-ingest-app/src/main/resources/application.yml
new file mode 100644
index 00000000..7d2e7e64
--- /dev/null
+++ b/modules/apps/gb32960-ingest-app/src/main/resources/application.yml
@@ -0,0 +1,108 @@
+spring:
+ application:
+ name: gb32960-ingest-app
+ threads:
+ virtual:
+ enabled: true
+
+server:
+ port: ${HTTP_PORT:20100}
+
+lingniu:
+ ingest:
+ gb32960:
+ enabled: true
+ port: ${GB32960_PORT:32960}
+ boss-threads: ${GB32960_BOSS_THREADS:1}
+ worker-threads: ${GB32960_WORKER_THREADS:0}
+ auth:
+ enabled: ${GB32960_AUTH_ENABLED:false}
+ case-sensitive: false
+ whitelist: []
+ platforms:
+ - username: ${GB32960_PLATFORM_USER_HYUNDAI:Hyundai}
+ password: ${GB32960_PLATFORM_PWD_HYUNDAI:f2e3445d7cda409fb4f278f6fb890734}
+ allowed-ips:
+ - ${GB32960_PLATFORM_IP_HYUNDAI:8.134.95.166}
+ description: 外部下级平台 - Hyundai
+ tls:
+ enabled: ${GB32960_TLS_ENABLED:false}
+ cert-path: ${GB32960_TLS_CERT:}
+ key-path: ${GB32960_TLS_KEY:}
+ trust-cert-path: ${GB32960_TLS_CA:}
+ require-client-auth: true
+ vendor-extensions:
+ - name: guangdong-fc
+ match:
+ platform-accounts:
+ - Hyundai
+ vin-prefixes: []
+ vins: []
+ parse:
+ lenient-block-failure: true
+ diagnostics:
+ max-logged-frame-keys-per-channel: ${GB32960_DIAGNOSTICS_MAX_LOGGED_FRAME_KEYS_PER_CHANNEL:4096}
+ pipeline:
+ disruptor:
+ ring-buffer-size: ${PIPELINE_RING_BUFFER_SIZE:131072}
+ wait-strategy: ${PIPELINE_WAIT_STRATEGY:yielding}
+ producer-type: multi
+ dedup:
+ enabled: true
+ cache-size: 200000
+ ttl-seconds: 600
+ rate-limit:
+ per-vin-qps: 50
+ session:
+ store: ${SESSION_STORE:memory}
+ ttl: ${SESSION_TTL:30m}
+ identity:
+ store: ${VEHICLE_IDENTITY_STORE:file}
+ file:
+ path: ${VEHICLE_IDENTITY_FILE:./data/vehicle-identity.jsonl}
+ sink:
+ mq:
+ enabled: ${KAFKA_ENABLED:true}
+ type: kafka
+ bootstrap-servers: ${KAFKA_BROKERS:114.55.58.251:9092}
+ compression-type: zstd
+ linger-ms: 20
+ batch-size: 65536
+ acks: all
+ enable-idempotence: true
+ node-id: ${KAFKA_NODE_ID:gb32960-ingest-local}
+ topics:
+ realtime: ${KAFKA_TOPIC_GB32960_EVENT:vehicle.event.gb32960.v1}
+ location: ${KAFKA_TOPIC_GB32960_EVENT:vehicle.event.gb32960.v1}
+ alarm: ${KAFKA_TOPIC_GB32960_EVENT:vehicle.event.gb32960.v1}
+ session: ${KAFKA_TOPIC_GB32960_EVENT:vehicle.event.gb32960.v1}
+ media-meta: ${KAFKA_TOPIC_MEDIA_META:vehicle.media.meta.v1}
+ raw-archive: ${KAFKA_TOPIC_GB32960_RAW:vehicle.raw.gb32960.v1}
+ dlq: ${KAFKA_TOPIC_GB32960_DLQ:vehicle.dlq.gb32960.v1}
+ consumer:
+ enabled: false
+ event-file-store:
+ enabled: false
+ event-history:
+ enabled: false
+ vehicle-state:
+ enabled: false
+ vehicle-stat:
+ enabled: false
+
+management:
+ endpoints:
+ web:
+ exposure:
+ include: health,info,metrics,prometheus,env
+ health:
+ redis:
+ enabled: ${MANAGEMENT_HEALTH_REDIS_ENABLED:false}
+ metrics:
+ tags:
+ application: gb32960-ingest-app
+
+logging:
+ level:
+ root: INFO
+ com.lingniu.ingest: INFO
diff --git a/modules/apps/vehicle-analytics-app/pom.xml b/modules/apps/vehicle-analytics-app/pom.xml
index 38da4c6b..7aec22a3 100644
--- a/modules/apps/vehicle-analytics-app/pom.xml
+++ b/modules/apps/vehicle-analytics-app/pom.xml
@@ -46,5 +46,21 @@
vehicle-analytics-app
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ --sun-misc-unsafe-memory-access=allow
+
+
+
+
+ repackage
+
+
+
+
+
diff --git a/modules/apps/vehicle-analytics-app/src/main/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsApplication.java b/modules/apps/vehicle-analytics-app/src/main/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsApplication.java
new file mode 100644
index 00000000..4dbed352
--- /dev/null
+++ b/modules/apps/vehicle-analytics-app/src/main/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsApplication.java
@@ -0,0 +1,21 @@
+package com.lingniu.ingest.analyticsapp;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication(scanBasePackages = "com.lingniu.ingest")
+public class VehicleAnalyticsApplication {
+
+ private static final Logger log = LoggerFactory.getLogger(VehicleAnalyticsApplication.class);
+
+ public static void main(String[] args) {
+ try {
+ SpringApplication.run(VehicleAnalyticsApplication.class, args);
+ } catch (Throwable t) {
+ log.error("Vehicle analytics application failed to start, forcing JVM exit", t);
+ System.exit(1);
+ }
+ }
+}
diff --git a/modules/apps/vehicle-analytics-app/src/main/resources/application.yml b/modules/apps/vehicle-analytics-app/src/main/resources/application.yml
new file mode 100644
index 00000000..8581f3d1
--- /dev/null
+++ b/modules/apps/vehicle-analytics-app/src/main/resources/application.yml
@@ -0,0 +1,62 @@
+spring:
+ application:
+ name: vehicle-analytics-app
+ threads:
+ virtual:
+ enabled: true
+
+server:
+ port: ${HTTP_PORT:20300}
+
+lingniu:
+ ingest:
+ gb32960:
+ enabled: false
+ sink:
+ mq:
+ 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}
+ dlq: ${KAFKA_TOPIC_GB32960_DLQ:vehicle.dlq.gb32960.v1}
+ consumer:
+ enabled: ${KAFKA_CONSUMER_ENABLED:true}
+ client-id-prefix: ${KAFKA_CONSUMER_CLIENT_ID_PREFIX:vehicle-analytics}
+ auto-offset-reset: ${KAFKA_CONSUMER_AUTO_OFFSET_RESET:earliest}
+ max-poll-records: ${KAFKA_CONSUMER_MAX_POLL_RECORDS:500}
+ bindings:
+ vehicleStateEnvelopeConsumerProcessor:
+ enabled: ${VEHICLE_STATE_ENABLED:false}
+ group-id: ${KAFKA_GROUP_STATE:vehicle-state}
+ topics:
+ - ${KAFKA_TOPIC_GB32960_EVENT:vehicle.event.gb32960.v1}
+ vehicleStatEnvelopeConsumerProcessor:
+ enabled: ${VEHICLE_STAT_ENABLED:true}
+ group-id: ${KAFKA_GROUP_STAT:vehicle-stat}
+ topics:
+ - ${KAFKA_TOPIC_GB32960_EVENT:vehicle.event.gb32960.v1}
+ archive:
+ enabled: false
+ event-file-store:
+ enabled: false
+ event-history:
+ enabled: false
+ vehicle-state:
+ enabled: ${VEHICLE_STATE_ENABLED:false}
+ vehicle-stat:
+ enabled: ${VEHICLE_STAT_ENABLED:true}
+ file-path: ${VEHICLE_STAT_FILE_PATH:./target/vehicle-stat/}
+ zone-id: ${VEHICLE_STAT_ZONE_ID:Asia/Shanghai}
+
+management:
+ endpoints:
+ web:
+ exposure:
+ include: health,info,metrics,prometheus,env
+ health:
+ redis:
+ enabled: ${MANAGEMENT_HEALTH_REDIS_ENABLED:false}
+ metrics:
+ tags:
+ application: vehicle-analytics-app
diff --git a/modules/apps/vehicle-history-app/pom.xml b/modules/apps/vehicle-history-app/pom.xml
index 6620c0ee..f9dfeedb 100644
--- a/modules/apps/vehicle-history-app/pom.xml
+++ b/modules/apps/vehicle-history-app/pom.xml
@@ -54,5 +54,21 @@
vehicle-history-app
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ --sun-misc-unsafe-memory-access=allow
+
+
+
+
+ repackage
+
+
+
+
+
diff --git a/modules/apps/vehicle-history-app/src/main/java/com/lingniu/ingest/historyapp/VehicleHistoryApplication.java b/modules/apps/vehicle-history-app/src/main/java/com/lingniu/ingest/historyapp/VehicleHistoryApplication.java
new file mode 100644
index 00000000..7e8986ef
--- /dev/null
+++ b/modules/apps/vehicle-history-app/src/main/java/com/lingniu/ingest/historyapp/VehicleHistoryApplication.java
@@ -0,0 +1,21 @@
+package com.lingniu.ingest.historyapp;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication(scanBasePackages = "com.lingniu.ingest")
+public class VehicleHistoryApplication {
+
+ private static final Logger log = LoggerFactory.getLogger(VehicleHistoryApplication.class);
+
+ public static void main(String[] args) {
+ try {
+ SpringApplication.run(VehicleHistoryApplication.class, args);
+ } catch (Throwable t) {
+ log.error("Vehicle history application failed to start, forcing JVM exit", t);
+ System.exit(1);
+ }
+ }
+}
diff --git a/modules/apps/vehicle-history-app/src/main/resources/application.yml b/modules/apps/vehicle-history-app/src/main/resources/application.yml
new file mode 100644
index 00000000..e6f1d27c
--- /dev/null
+++ b/modules/apps/vehicle-history-app/src/main/resources/application.yml
@@ -0,0 +1,63 @@
+spring:
+ application:
+ name: vehicle-history-app
+ threads:
+ virtual:
+ enabled: true
+
+server:
+ port: ${HTTP_PORT:20200}
+
+lingniu:
+ ingest:
+ gb32960:
+ enabled: false
+ sink:
+ mq:
+ 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}
+ raw-archive: ${KAFKA_TOPIC_GB32960_RAW:vehicle.raw.gb32960.v1}
+ dlq: ${KAFKA_TOPIC_GB32960_DLQ:vehicle.dlq.gb32960.v1}
+ consumer:
+ enabled: ${KAFKA_CONSUMER_ENABLED:true}
+ client-id-prefix: ${KAFKA_CONSUMER_CLIENT_ID_PREFIX:vehicle-history}
+ auto-offset-reset: ${KAFKA_CONSUMER_AUTO_OFFSET_RESET:earliest}
+ max-poll-records: ${KAFKA_CONSUMER_MAX_POLL_RECORDS:500}
+ bindings:
+ eventHistoryEnvelopeConsumerProcessor:
+ enabled: true
+ group-id: ${KAFKA_GROUP_HISTORY:vehicle-history}
+ topics:
+ - ${KAFKA_TOPIC_GB32960_EVENT:vehicle.event.gb32960.v1}
+ - ${KAFKA_TOPIC_GB32960_RAW:vehicle.raw.gb32960.v1}
+ archive:
+ enabled: ${SINK_ARCHIVE_ENABLED:true}
+ type: local
+ path: ${SINK_ARCHIVE_PATH:./archive/}
+ event-file-store:
+ enabled: ${EVENT_FILE_STORE_ENABLED:true}
+ path: ${EVENT_FILE_STORE_PATH:./target/event-store/}
+ zone-id: ${EVENT_FILE_STORE_ZONE_ID:Asia/Shanghai}
+ batch-size: ${EVENT_FILE_STORE_BATCH_SIZE:500}
+ flush-interval-millis: ${EVENT_FILE_STORE_FLUSH_INTERVAL_MILLIS:1000}
+ event-history:
+ enabled: true
+ vehicle-state:
+ enabled: false
+ vehicle-stat:
+ enabled: false
+
+management:
+ endpoints:
+ web:
+ exposure:
+ include: health,info,metrics,prometheus,env
+ health:
+ redis:
+ enabled: ${MANAGEMENT_HEALTH_REDIS_ENABLED:false}
+ metrics:
+ tags:
+ application: vehicle-history-app