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

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

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

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

    • 常见问题
    • 捐赠支持

微服务架构

目录

  1. 引言
  2. 微服务职责划分
  3. 服务启动入口与配置
  4. 服务间通信机制
  5. 部署拓扑与中间件依赖
  6. Docker与容器化部署
  7. 部署拓扑图

引言

MultiProtocol是一个用于充电桩管理的微服务架构系统,采用模块化设计将业务逻辑与协议处理分离。该系统由两个核心微服务组成:mp-app(主应用服务)和Mp-protocol-api(协议处理核心),通过清晰的职责划分实现高内聚、低耦合的系统架构。本文档详细阐述这两个微服务的架构设计、通信机制、配置管理及部署方案。

微服务职责划分

mp-app(主应用服务)

mp-app微服务负责系统的业务逻辑处理和用户交互,是整个系统的后端核心。其主要职责包括:

  • 业务逻辑处理:实现充电桩、充电枪、充电站等实体的增删改查操作,处理用户管理、权限控制、计费策略等核心业务逻辑。
  • REST API暴露:通过Spring MVC提供标准的RESTful API接口,供客户端或其他系统调用,如充电桩管理、用户认证、数据查询等接口。
  • 数据库交互:使用MyBatis作为持久层框架,与PostgreSQL数据库进行交互,管理充电桩、用户、会话等结构化数据。
  • 用户管理:实现基于JWT的认证授权机制,管理用户登录、权限验证和会话生命周期。

微服务职责来源

  • [PileController.java](file://mp-app/src/main/java/com/witos/mp/app/adapter/controller/PileController.java#L1-L112)
  • [ProtocolController.java](file://mp-app/src/main/java/com/witos/mp/app/adapter/controller/ProtocolController.java#L1-L41)

mp-protocol-api(协议处理核心)

mp-protocol-api微服务专注于充电桩通信协议的处理,是系统的通信前置。其主要职责包括:

  • TCP长连接处理:使用Netty框架监听指定端口(如38001-38011),接收来自充电桩的TCP连接请求,维护长连接会话。
  • 协议编解码:针对不同厂商的充电桩协议(如云快充V150/V160/V170、绿能V340),实现消息的编码与解码,处理二进制、JSON等格式的数据包。
  • 消息路由:根据协议类型和消息内容,将上行消息路由到相应的处理器进行业务逻辑处理,并将下行指令正确发送到指定的充电桩。
  • gRPC接口暴露:提供gRPC服务接口,允许Mp-app等服务通过高性能的远程过程调用方式向充电桩发送控制指令。

微服务职责来源

  • [DownlinkController.java](file://mp-protocol-api/src/main/java/com/witos/mp/protocol/adapter/DownlinkController.java#L1-L76)
  • [DownlinkGrpcService.java](file://mp-protocol-api/src/main/java/com/witos/mp/protocol/adapter/DownlinkGrpcService.java#L1-L185)

服务启动入口与配置

启动入口

系统通过两个独立的Spring Boot应用作为微服务的启动入口:

  • mp-app启动入口:MpServerApplication类是Mp-app微服务的主启动类。它通过@SpringBootApplication注解启用Spring Boot自动配置,并通过main方法启动应用。启动时会自动加载app-service.yml配置文件,并在启动完成后输出启动耗时日志。

  • mp-protocol-api启动入口:MpProtocolServiceApplication类是Mp-protocol-api微服务的主启动类。它同样基于Spring Boot,但通过scanBasePackages指定了特定的包扫描范围,确保只加载协议相关的组件。其main方法负责启动协议服务。

启动入口来源

  • [MpServerApplication.java](file://mp-app-bootstrap/src/main/java/com/witos/mp/MpServerApplication.java#L1-L55)
  • [MpProtocolServiceApplication.java](file://mp-protocol-bootstrap/src/main/java/com/witos/mp/protocol/MpProtocolServiceApplication.java#L1-L59)

配置文件

每个微服务都有独立的YAML配置文件,实现配置隔离:

  • app-service.yml :mp-app微服务的配置文件,定义了HTTP服务器端口(8080)、数据库连接(PostgreSQL)、缓存配置(Caffeine/Redis)、Kafka队列、安全设置(JWT)等。通过环境变量(如 SPRING_DATASOURCE_URL)支持不同环境的配置注入。

  • protocol-service.yml :mp-protocol-api微服务的配置文件,定义了HTTP服务器端口(8081)、gRPC服务端口(9090)、各协议监听器的TCP端口(如云快充V150在38001端口)、以及Kafka生产者配置。该文件明确将 service.type设置为protocol,表明其为纯协议处理服务。

配置文件来源

  • [app-service.yml](file://mp-app-bootstrap/src/main/resources/app-service.yml#L1-L432)
  • [protocol-service.yml](file://mp-protocol-bootstrap/src/main/resources/protocol-service.yml#L1-L274)

服务间通信机制

异步消息传递(Kafka)

两个微服务通过Apache Kafka进行异步消息传递,实现解耦和削峰填谷:

  • 消息类型:ProtocolUplinkMsg 是核心的上行消息类型,封装了来自充电桩的原始数据。当Mp-protocol-api接收到充电桩的上行消息时,会将其序列化为Protobuf格式,并通过Kafka生产者发送到名为 protocol_uplink的主题。

  • 消息消费:mp-app微服务中包含ProtocolUplinkConsumerService消费者,它订阅protocol_uplink主题,从Kafka拉取 ProtocolUplinkMsg消息。消费后,消息会被反序列化并分发到相应的业务处理器,如更新充电桩状态、记录充电数据等。

异步通信来源

  • [ProtocolUplinkMsg.java](file://mp-protocol-api/src/main/java/com/witos/mp/protocol/domain/ProtocolUplinkMsg.java#L1-L24)
  • [ProtocolUplinkConsumerService.java](file://mp-app/src/main/java/com/witos/mp/app/service/queue/consumer/ProtocolUplinkConsumerService.java)

同步远程调用(gRPC)

对于需要即时响应的控制指令,系统采用gRPC进行同步远程调用:

  • gRPC服务端:mp-protocol-api通过DownlinkGrpcService类暴露gRPC服务。它继承自 ProtocolInterfaceGrpc.ProtocolInterfaceImplBase,实现了onDownlink方法,用于接收来自Mp-app的下行控制请求(如启动充电、停止充电、设置电价等)。

  • gRPC客户端:mp-app通过DownlinkGrpcClient类作为gRPC客户端。它维护与Mp-protocol-api的长连接,并提供 sendDownlinkRequest方法。当业务需要向充电桩发送指令时,mp-app会构造RequestMsg,通过gRPC客户端发送给Mp-protocol-api。

  • 通信流程:mp-app -> (gRPC) -> mp-protocol-api -> (TCP) -> 充电桩。gRPC调用确保了指令的可靠、低延迟传输。

同步通信来源

  • [DownlinkGrpcService.java](file://mp-protocol-api/src/main/java/com/witos/mp/protocol/adapter/DownlinkGrpcService.java#L1-L185)
  • [DownlinkGrpcClient.java](file://mp-app/src/main/java/com/witos/mp/app/service/grpc/DownlinkGrpcClient.java#L1-L298)

部署拓扑与中间件依赖

系统依赖于多种中间件来实现其功能:

  • PostgreSQL:作为主数据库,由Mp-app服务连接,用于持久化存储充电桩、用户、站点等核心业务数据。
  • Redis:作为缓存层,由Mp-app服务连接,用于缓存充电桩状态、会话信息等高频访问数据,减轻数据库压力。
  • Kafka:作为消息中间件,是两个微服务间通信的桥梁。mp-protocol-api将上行消息发布到Kafka,mp-app从Kafka消费这些消息。

中间件依赖来源

  • [app-service.yml](file://mp-app-bootstrap/src/main/resources/app-service.yml#L30-L100)

Docker与容器化部署

系统通过Docker实现容器化部署,确保环境一致性:

  • Docker镜像构建:提供了app.Dockerfile和protocol.Dockerfile 两个Dockerfile。它们都基于相同的Java基础镜像,采用多阶段构建。首先在构建阶段编译打包应用,然后在运行阶段提取JAR包的分层内容,实现更小的镜像体积和更快的启动速度。

  • Docker Compose:通过docker-compose.monolith.yml文件定义了本地开发环境的多服务部署。它创建了一个名为 com/witos-network的自定义网络,并定义了mp-node-0服务,该服务使用app.Dockerfile 构建,将容器的8080端口映射到宿主机,并暴露了多个TCP端口(38001等)用于充电桩连接。

容器化部署来源

  • [app.Dockerfile](file://docker/app.Dockerfile#L1-L47)
  • [protocol.Dockerfile](file://docker/protocol.Dockerfile#L1-L47)
  • [docker-compose.monolith.yml](file://docker/docker-compose.monolith.yml#L1-L29)

部署拓扑图

以下Mermaid图展示了MultiProtocol系统的部署拓扑和各组件间的连接关系。

graph TD
subgraph "客户端"
end
subgraph "应用服务层"
App[mp-app]
Protocol[mp-protocol-api]
end
subgraph "中间件"
Kafka[(Kafka)]
Redis[(Redis)]
PostgreSQL[(PostgreSQL)]
end
subgraph "设备层"
Charger[充电桩]
end
App --> |gRPC| Protocol
Protocol --> |TCP| Charger
Protocol --> |Publish| Kafka
Kafka --> |Subscribe| App
App --> |读写| PostgreSQL
App --> |读写| Redis

图示来源

  • [app.Dockerfile](file://docker/app.Dockerfile#L1-L47)
  • [protocol.Dockerfile](file://docker/protocol.Dockerfile#L1-L47)
  • [docker-compose.monolith.yml](file://docker/docker-compose.monolith.yml#L1-L29)
  • [app-service.yml](file://mp-app-bootstrap/src/main/resources/app-service.yml#L1-L432)
  • [protocol-service.yml](file://mp-protocol-bootstrap/src/main/resources/protocol-service.yml#L1-L274)
最近更新:: 2026/5/1 15:39
Contributors: feng
Prev
架构设计
Next
数据流分析