慧知开源充电桩多协议微服务平台慧知开源充电桩多协议微服务平台
首页
介绍
快速了解
多协议模块
GitHub
首页
介绍
快速了解
多协议模块
GitHub
  • 文档

    • 介绍
    • 快速了解
    • 环境部署
    • 项目介绍
    • 后台手册
    • 前端手册
    • 组件文档
    • 更新日志
  • 微服务

    • 服务网关
    • 认证中心
    • 注册中心
    • 配置中心
    • 服务调用
    • 服务监控
    • 系统接口
    • 链路追踪
    • 熔断和降级
    • 分布式文件
    • 分布式事务
    • 分布式日志
    • 应用容器部署
  • 多协议模块

    • 系统概述
    • 技术栈与依赖
    • 开发者指南
    • 部署与配置
    • 消息队列集成
    • 缓存架构
    • 监控与运维
    • 安全机制
    • 数据模型与数据库设计
    • 架构设计
      • 架构设计
      • 微服务架构
      • 数据流分析
      • 架构模式
    • API接口参考
      • API接口参考
      • gRPC API
      • REST API
    • 核心模块详解
      • 核心模块详解
      • 协议处理框架
      • 设备管理模块
      • 协议实现模块
        • 云快充协议实现
        • 核心架构与初始化
        • 上行消息处理
        • 下行消息处理
        • 绿能协议实现
        • 核心架构
        • 下行消息处理
  • 其他

    • 常见问题
    • 捐赠支持

技术栈与依赖

目录

  1. 后端技术栈
  2. 中间件与存储
  3. 构建与部署

后端技术栈

Spring Boot 基础框架

Spring Boot 作为本项目的核心基础框架,提供了自动配置、起步依赖和嵌入式服务器等特性,极大地简化了Java应用的开发和部署。项目基于Spring Boot 3.5.6版本构建,利用其强大的生态系统来管理依赖、配置和生命周期。通过spring-boot-starter-parent 作为父POM,实现了版本统一管理和标准化构建流程。

Section sources

  • [pom.xml](file://pom.xml#L10-L15)

MyBatis 数据库访问机制

项目采用MyBatis-Plus作为持久层框架,基于MyBatis进行了功能增强,提供了CRUD操作的封装,减少了模板代码的编写。通过 mybatis-plus-spring-boot3-starter依赖集成,实现了与Spring Boot的无缝对接。项目中的实体类(如Pile、Station、Gun )通过Mapper接口与XML映射文件进行数据库操作,支持动态SQL和分页查询。

Section sources

  • [mp-app/pom.xml](file://mp-app/pom.xml#L25-L30)
  • [mp-app/src/main/java/com/witos/mp/app/dal/mapper](file://mp-app/src/main/java/com/witos/mp/app/dal/mapper)

Netty TCP网络通信原理

Netty被用于处理TCP网络通信,特别是在充电桩协议解析模块中。TcpListener类使用Netty的ServerBootstrap创建TCP服务器,通过 NioEventLoopGroup管理事件循环,实现了高性能的异步非阻塞I/O通信。项目中为不同协议(如云快充、绿能)配置了独立的TCP监听端口(38001-38011),并使用自定义的 mpLengthFieldBasedFrameDecoder进行消息拆包,解决了TCP粘包问题。

sequenceDiagram
participant 充电桩 as 充电桩设备
participant Netty as Netty TCP Server
participant 协议处理器 as ProtocolMessageProcessor
participant Kafka as Kafka Queue
充电桩->>Netty : 发送二进制协议数据
Netty->>Netty : MpLengthFieldBasedFrameDecoder拆包
Netty->>协议处理器 : 解析协议并处理上行消息
协议处理器->>Kafka : 将消息转发到protocol_uplink主题
Kafka-->>应用服务 : 消费消息并更新业务状态

Diagram sources

  • [mp-protocol-api/src/main/java/com/witos/mp/protocol/listener/tcp/TcpListener.java](file://mp-protocol-api/src/main/java/com/witos/mp/protocol/listener/tcp/TcpListener.java#L40-L80)
  • [mp-app-bootstrap/src/main/resources/app-service.yml](file://mp-app-bootstrap/src/main/resources/app-service.yml#L300-L350)

gRPC与Protobuf服务间通信

项目采用gRPC与Protobuf实现高性能的服务间通信。通过.proto文件定义服务接口和消息结构,使用Protocol Buffers进行序列化,相比JSON具有更小的体积和更快的解析速度。grpc.proto文件定义了ProtocolInterface服务,包含onDownlink 双向流式RPC方法,用于处理下行控制指令。这种设计支持实时、低延迟的通信,特别适合充电桩控制系统中需要快速响应的场景。

classDiagram
class ProtocolInterface {
+onDownlink(stream RequestMsg) returns (stream ResponseMsg)
}
class RequestMsg {
+int64 ts
+TracerProto tracer
+ConnectRequestMsg connectRequestMsg
+DownlinkRequestMessage downlinkRequestMessage
}
class ResponseMsg {
+TracerProto tracer
+ConnectResponseMsg connectResponseMsg
+DownlinkResponseMessage downlinkResponseMsg
}
class ConnectRequestMsg {
+string nodeId
}
class ConnectResponseMsg {
+ConnectResponseCode responseCode
+string errorMsg
}
ProtocolInterface --> RequestMsg : "请求"
ProtocolInterface --> ResponseMsg : "响应"
RequestMsg --> ConnectRequestMsg : "包含"
ResponseMsg --> ConnectResponseMsg : "包含"

Diagram sources

  • [mp-infrastructure-proto/src/main/proto/grpc.proto](file://mp-infrastructure-proto/src/main/proto/grpc.proto#L10-L30)
  • [mp-protocol-api/src/main/java/com/witos/mp/protocol/adapter/DownlinkController.java](file://mp-protocol-api/src/main/java/com/witos/mp/protocol/adapter/DownlinkController.java#L40-L60)

PostgreSQL持久化存储

PostgreSQL被选为关系型数据库,用于持久化存储充电桩、站点、用户等核心业务数据。通过spring-boot-starter-jdbc和postgresql 驱动集成,使用HikariCP连接池管理数据库连接。配置中设置了最大连接池大小为64,优化了数据库访问性能。项目中的schema-init.sql 脚本定义了表结构,确保了数据的一致性和完整性。

Section sources

  • [mp-app/pom.xml](file://mp-app/pom.xml#L20-L25)
  • [mp-app/src/main/resources/sql/schema-init.sql](file://mp-app/src/main/resources/sql/schema-init.sql)

Redis多级缓存架构

项目实现了Caffeine+Redis的多级缓存架构,以提高系统性能和响应速度。mp-infrastructure-cache 模块封装了缓存逻辑,支持Caffeine本地缓存和Redis分布式缓存两种模式。通过CacheSpecs配置不同实体(如piles、guns)的缓存策略,包括TTL和最大大小。 AttributeRedisCache和PileRedisCache等类实现了具体的缓存操作,利用Redis的高性能读写能力,减轻了数据库压力。

flowchart TD
A[客户端请求] --> B{本地缓存存在?}
B --> |是| C[返回Caffeine缓存数据]
B --> |否| D[查询Redis缓存]
D --> E{Redis缓存存在?}
E --> |是| F[更新Caffeine缓存]
E --> |否| G[查询数据库]
G --> H[更新Redis缓存]
H --> I[更新Caffeine缓存]
I --> J[返回数据]

Diagram sources

  • [mp-infrastructure-cache/pom.xml](file://mp-infrastructure-cache/pom.xml#L20-L30)
  • [mp-app-bootstrap/src/main/resources/app-service.yml](file://mp-app-bootstrap/src/main/resources/app-service.yml#L200-L250)

Kafka消息解耦与高并发

Kafka在系统中扮演着消息中间件的角色,用于解耦服务和处理高并发消息流。mp-infrastructure-queue 模块封装了Kafka客户端,支持生产者和消费者模式。配置中设置了protocol_uplink 主题,用于接收来自充电桩的上行消息。通过分区(partitions)和消费者组(consumer groups)实现消息的并行处理,提高了系统的吞吐量。Kafka的持久化特性确保了消息不丢失,即使在服务重启后也能继续处理。

Section sources

  • [mp-infrastructure-queue/pom.xml](file://mp-infrastructure-queue/pom.xml#L20-L30)
  • [mp-app-bootstrap/src/main/resources/app-service.yml](file://mp-app-bootstrap/src/main/resources/app-service.yml#L100-L150)

构建与部署

Maven多模块项目管理

项目采用Maven进行多模块管理,通过父POM(mp-parent)统一管理所有子模块的依赖和插件版本。项目包含多个模块,如mp-app、mp-protocol-api、mp-infrastructure-cache等,每个模块都有明确的职责。pom.xml中配置了protobuf-maven-plugin用于编译.proto文件。这种模块化设计提高了代码的可维护性和复用性。

Section sources

  • [pom.xml](file://pom.xml#L100-L200)
  • [mp-app/pom.xml](file://mp-app/pom.xml)

Docker容器化部署

系统通过Docker实现容器化部署,使用app.Dockerfile 定义应用镜像。采用多阶段构建策略,首先使用基础镜像编译Maven项目,然后提取JAR包的各个层(dependencies、spring-boot-loader等),最后构建运行时镜像。 docker-compose.monolith.yml定义了服务网络和端口映射,将应用服务暴露在8080端口,同时开放了多个TCP协议端口(38001-38011)。这种部署方式确保了环境一致性,简化了部署流程。

graph TB
subgraph "Docker构建流程"
A[Maven构建] --> B[提取JAR层]
B --> C[构建运行时镜像]
C --> D[运行容器]
end
subgraph "容器网络"
D --> E[暴露HTTP端口 8080]
D --> F[暴露TCP协议端口 38001-38011]
end
subgraph "外部连接"
E --> G[应用服务]
F --> H[充电桩设备]
end

Diagram sources

  • [docker/app.Dockerfile](file://docker/app.Dockerfile)
  • [docker/docker-compose.monolith.yml](file://docker/docker-compose.monolith.yml)
最近更新:: 2026/5/1 15:39
Contributors: feng
Prev
系统概述
Next
开发者指南