How to Set Up the KEdge-Gateway for Edge Computing in KCloud-Platform-IoT
The KEdge-Gateway is a lightweight, Quarkus 3.x-based edge computing module that uses Vert.x-MQTT for reactive IoT messaging and SQLite for local persistence, deployable as both JVM applications and native binaries on ARM edge devices.
Setting up the KEdge-Gateway for edge computing in KCloud-Platform-IoT establishes a high-performance bridge between resource-constrained IoT devices and cloud services. This edge gateway, located in the KEdge-Gateway/ directory of the koushenhai/kcloud-platform-iot repository, compiles to ultra-low footprint native executables ideal for ARM-based single-board computers while maintaining full MQTT broker capabilities.
Architecture and Key Components
The KEdge-Gateway architecture centers on Quarkus 3.32.2 with a reactive core designed for sub-second startup times. In KEdge-Gateway/pom.xml, the build file declares three critical dependencies: io.vertx:vertx-mqtt for asynchronous MQTT client operations, io.quarkiverse.jdbc:quarkus-jdbc-sqlite4j for embedded zero-configuration database storage, and standard Quarkus extensions for containerization.
The SQLite integration provides local persistence for device metadata and offline caching without external database dependencies. Vert.x-MQTT handles high-throughput publish/subscribe patterns with IoT sensors, while the embedded REST layer exposes health check endpoints for container orchestration platforms.
Building the KEdge-Gateway
JVM Mode Compilation
For standard deployments or development environments, build the JVM-mode artifact using Maven. The pom.xml automatically resolves Quarkus extensions and Vert.x dependencies.
# Navigate to the gateway module
cd KEdge-Gateway
# Compile the application
mvn clean package
# Run in development mode with hot-reload
mvn quarkus:dev
# Or execute the production JAR
java -jar target/quarkus-app/quarkus-run.jar
Native Binary Compilation for ARM Edge Devices
For production deployments on Raspberry Pi or Rockchip boards, compile to a native binary using GraalVM. This eliminates JVM overhead and reduces memory consumption to tens of megabytes.
# Build native binary using containerized GraalVM (no local GraalVM installation required)
mvn package -Pnative -Dquarkus.native.container-build=true
# The executable appears at:
# target/kedge-gateway-1.0.0-SNAPSHOT-runner
Execute the native binary directly on the target device:
chmod +x target/kedge-gateway-1.0.0-SNAPSHOT-runner
./target/kedge-gateway-1.0.0-SNAPSHOT-runner
Configuring Network Interfaces on ARM Devices
Edge deployments require reliable network connectivity across Ethernet, 4G, or Wi-Fi interfaces. The repository includes KEdge-Gateway/sh/arm_aarch64_network.sh, a Bash utility for managing network configurations on ARM64 devices.
Enable DHCP on Ethernet:
chmod +x sh/arm_aarch64_network.sh
sudo sh/arm_aarch64_network.sh connect_eth0_dhcp
Configure static IP addressing:
sudo sh/arm_aarch64_network.sh connect_eth0_static eth0 192.168.1.100 192.168.1.1 8.8.8.8
Scan available Wi-Fi networks:
sh/arm_aarch64_network.sh scan_wlan0
The script returns true/false status strings or interface metadata (MAC address, IP, gateway) that automation tools can parse for dynamic network provisioning.
Application Configuration and Deployment
The minimal configuration in KEdge-Gateway/src/main/resources/application.yml defines the service name and runtime parameters. Extend this file or use environment variables to specify MQTT broker URLs, Nacos service registry endpoints, and SQLite database paths.
# Example application.yml structure
quarkus:
application:
name: kedge-gateway
datasource:
db-kind: sqlite
jdbc:
url: jdbc:sqlite:edge_cache.db
When deploying to Kubernetes or Docker environments, override these values via ConfigMaps or environment variables rather than modifying the YAML directly. The gateway registers with the central Nacos service registry if enabled, enabling cloud-side discovery of edge nodes.
Verifying the REST Endpoint
The TestResource.java class located at KEdge-Gateway/src/main/java/org/laokou/edge/gateway/api/TestResource.java exposes a basic health check endpoint for load balancers and orchestration tools.
Test the deployment:
curl http://localhost:8080/test/
A response of test confirms the Quarkus HTTP layer, JAX-RS routing, and embedded server are functioning correctly on the edge device.
Summary
- KEdge-Gateway leverages Quarkus 3.x and Vert.x-MQTT to provide reactive MQTT messaging at the edge with minimal resource overhead.
- Build the project using standard Maven commands for JVM mode, or use
-Pnativefor GraalVM compilation to ARM64 binaries under 50MB. - Configure network interfaces using the provided
arm_aarch64_network.shscript, which supports DHCP, static IP assignment, and Wi-Fi scanning. - Local persistence uses SQLite via
quarkus-jdbc-sqlite4j, requiring zero external database infrastructure. - Verify deployments using the
/testendpoint defined inTestResource.javabefore connecting production IoT devices.
Frequently Asked Questions
What hardware platforms support KEdge-Gateway deployment?
The gateway targets ARM64 single-board computers including Raspberry Pi 4/5 and Rockchip-based devices. The native compilation support in pom.xml generates Linux ARM64 binaries, while JVM mode runs on any platform supporting Java 17 or higher.
How does KEdge-Gateway handle offline network scenarios?
The embedded SQLite database in KEdge-Gateway caches device metadata and MQTT messages locally when cloud connectivity drops. Once the network interface restored via arm_aarch64_network.sh reconnection routines, the gateway synchronizes cached state with the central Nacos registry and upstream MQTT brokers.
Can I customize the MQTT broker configuration without rebuilding?
Yes. While application.yml contains minimal defaults, override MQTT broker URLs and authentication credentials using environment variables or external configuration mounted at runtime. Quarkus configuration profiles allow maintaining separate settings for development, staging, and production edge environments without modifying the source pom.xml or Java classes.
What is the typical memory footprint of the native binary?
According to the Quarkus 3.x native compilation settings in the build configuration, the kedge-gateway-1.0.0-SNAPSHOT-runner binary typically consumes under 80MB of RAM at runtime, compared to 200MB+ for JVM mode, making it suitable for edge devices with 512MB or less total system memory.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →