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

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

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

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

    • 常见问题
    • 捐赠支持

部署与配置

目录

  1. Docker部署指南
  2. 核心配置文件详解
  3. 环境管理与配置
  4. 部署后验证

Docker部署指南

MultiProtocol项目提供了基于Docker的完整部署方案,通过多个docker-compose.*.yml 文件实现模块化部署。用户可以根据需要选择部署单体服务、数据库、缓存和消息队列等组件。

单体服务部署

使用docker-compose.monolith.yml文件部署包含应用和协议处理功能的单体服务。该服务通过app.Dockerfile 构建,暴露8080端口用于HTTP服务,38001-38011端口用于不同协议的TCP监听。

graph TB
subgraph "单体服务"
App[mp-node-0]
App --> Undertow[Undertow Web服务器]
App --> Netty[Netty协议处理器]
end
App --> Postgres[PostgreSQL]
App --> Redis[Redis]
App --> Kafka[Kafka]

图示来源

  • [docker-compose.monolith.yml](file://docker/docker-compose.monolith.yml)
  • [app.Dockerfile](file://docker/app.Dockerfile)

本节来源

  • [docker-compose.monolith.yml](file://docker/docker-compose.monolith.yml)

数据库部署

使用docker-compose.postgres.yml文件部署PostgreSQL数据库服务。该服务使用Bitnami提供的PostgreSQL镜像,配置了持久化卷 mp_pg_data以确保数据持久化。数据库名为mp,默认用户名和密码均为postgres,监听5432端口。

graph TB
subgraph "数据库服务"
Postgres[PostgreSQL]
Volume[mp_pg_data卷]
end
Postgres --> Volume

图示来源

  • [docker-compose.postgres.yml](file://docker/docker-compose.postgres.yml)

本节来源

  • [docker-compose.postgres.yml](file://docker/docker-compose.postgres.yml)

缓存部署

项目提供了三种Redis部署模式:单机模式(docker-compose.redis-standalone.yml)、哨兵模式和集群模式。推荐在生产环境中使用集群模式以确保高可用性。单机模式配置了密码 com/witos,监听6379端口。

graph TB
subgraph "缓存服务"
Redis[Redis]
end
Redis --> Password[密码认证]

图示来源

  • [docker-compose.redis-standalone.yml](file://docker/docker-compose.redis-standalone.yml)

本节来源

  • [docker-compose.redis-standalone.yml](file://docker/docker-compose.redis-standalone.yml)

消息队列部署

使用docker-compose.kafka.yml文件部署Kafka消息队列系统,包含Zookeeper、Kafka Broker、Kafka Exporter和Kafka UI四个组件。Zookeeper用于服务发现和配置管理,Kafka Broker处理消息,Kafka Exporter提供监控指标,Kafka UI提供Web管理界面。

graph TB
Zookeeper[Zookeeper]
Kafka[Kafka Broker]
Exporter[Kafka Exporter]
UI[Kafka UI]
Kafka --> Zookeeper
Exporter --> Kafka
UI --> Kafka

图示来源

  • [docker-compose.kafka.yml](file://docker/docker-compose.kafka.yml)
  • [kafka.env](file://docker/kafka.env)

本节来源

  • [docker-compose.kafka.yml](file://docker/docker-compose.kafka.yml)

核心配置文件详解

应用服务配置 (app-service.yml)

app-service.yml是应用服务的核心配置文件,定义了服务运行所需的各种参数。

服务与Web服务器配置

  • server.port: HTTP服务监听端口,默认8080,可通过HTTP_BIND_PORT环境变量覆盖
  • server.undertow: Undertow服务器配置,包括IO线程数(默认4)和工作线程数(默认128)
  • spring.datasource: 数据库连接配置,包括URL、用户名、密码和Hikari连接池大小(默认64)

安全与认证配置

  • security.jwt: JWT令牌配置,包括过期时间、刷新令牌时间和签名密钥
  • security.settings.passwordPolicy: 密码策略配置,定义密码最小长度(默认6)等安全要求

缓存配置

  • cache.type: 缓存类型,可选caffeine(本地缓存)或redis(分布式缓存)
  • redis: Redis连接配置,包括主机、端口、密码和连接池参数

协议服务配置

  • service.type: 服务类型,可选monolith(单体)、app(应用后端)或protocol(协议前置)
  • service.protocol.sessions: 协议会话配置,包括默认不活动超时时间(默认600秒)
classDiagram
class AppServiceConfig {
+String server.port
+String server.undertow.threads.io
+String server.undertow.threads.worker
+String spring.datasource.url
+String spring.datasource.hikari.maximum-pool-size
+String security.jwt.tokenExpirationTime
+String cache.type
+String redis.password
+String service.type
+String service.protocol.sessions.default-inactivity-timeout-in-sec
}

图示来源

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

本节来源

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

协议服务配置 (protocol-service.yml)

protocol-service.yml是协议服务的核心配置文件,专注于协议处理相关的配置。

服务类型与线程池

  • service.type: 服务类型,默认为protocol,表示纯协议解析前置服务
  • service.thread-pool.sharding: 分片线程池配置,包括并行度(默认8)和哈希函数

协议监听器配置

  • service.protocols.*.listener.tcp.bind-port: 不同协议版本的TCP监听端口,如云快充V150使用38001端口
  • service.protocols.*.listener.tcp.worker-group-thread-count: Netty工作线程组大小,默认16

消息转发配置

  • service.protocols.*.forwarder.type: 消息转发类型,在协议服务中通常为kafka
  • service.protocols.*.forwarder.kafka.topic: Kafka主题名称,默认为protocol_uplink
classDiagram
class ProtocolServiceConfig {
+String service.type
+String service.thread-pool.sharding.parallelism
+String service.protocols.yunkuaichongV150.listener.tcp.bind-port
+String service.protocols.yunkuaichongV150.listener.tcp.worker-group-thread-count
+String service.protocols.yunkuaichongV150.forwarder.type
+String service.protocols.yunkuaichongV150.forwarder.kafka.topic
}

图示来源

  • [protocol-service.yml](file://mp-protocol-bootstrap/src/main/resources/protocol-service.yml)

本节来源

  • [protocol-service.yml](file://mp-protocol-bootstrap/src/main/resources/protocol-service.yml)

环境管理与配置

配置文件管理

项目通过Spring Boot的配置机制支持多环境配置。核心配置文件app-service.yml和protocol-service.yml中的所有参数都支持通过环境变量覆盖,遵循 ${ENV_VAR_NAME:default_value}的格式。

开发环境

在开发环境中,可以使用内存队列(queue.type=memory)来简化部署,避免依赖Kafka。数据库连接可以指向本地PostgreSQL实例。

生产环境

在生产环境中,应使用完整的Docker Compose配置,包括PostgreSQL、Redis集群和Kafka。配置文件应设置适当的线程池大小和连接池参数以应对高并发。

环境变量使用

环境变量是管理不同环境配置的主要方式。以下是一些关键的环境变量:

  • HTTP_BIND_PORT: HTTP服务端口
  • SPRING_DATASOURCE_URL: 数据库连接字符串
  • REDIS_PASSWORD: Redis密码
  • KAFKA_SERVERS: Kafka Broker地址列表
  • SERVICE_TYPE: 服务类型
  • APP_LOG_LEVEL: 应用日志级别
  • PROTOCOLS_LOG_LEVEL: 协议日志级别

环境变量可以在docker-compose.yml文件的environment部分设置,也可以在启动脚本中通过export命令设置。

graph TD
A[环境变量] --> B[覆盖配置文件默认值]
B --> C{环境类型}
C --> D[开发环境]
C --> E[测试环境]
C --> F[生产环境]
D --> G[使用内存队列]
D --> H[本地数据库]
E --> I[独立测试数据库]
E --> J[独立Redis]
F --> K[集群化部署]
F --> L[高可用配置]

图示来源

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

本节来源

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

部署后验证

服务日志检查

部署后应首先检查服务日志以确认服务正常启动。日志配置由log4j2.xml文件定义,主要日志文件位于logs/mp目录下。

日志文件说明

  • mp-app.log: 应用服务主日志
  • mp-protocol.log: 协议服务主日志
  • accesslog: HTTP访问日志
  • gc.log: JVM垃圾回收日志
  • heapdump: 内存溢出时的堆转储文件

日志级别配置

通过APP_LOG_LEVEL和PROTOCOLS_LOG_LEVEL环境变量可以控制日志级别。推荐在生产环境中使用INFO级别,在调试时使用TRACE级别。

graph TD
A[日志检查] --> B[查看启动日志]
B --> C{是否包含错误}
C --> |是| D[分析错误原因]
C --> |否| E[检查服务端口]
E --> F[验证API功能]

图示来源

  • [log4j2.xml](file://mp-app-bootstrap/src/main/resources/log4j2.xml)
  • [log4j2.xml](file://mp-protocol-bootstrap/src/main/resources/log4j2.xml)

本节来源

  • [log4j2.xml](file://mp-app-bootstrap/src/main/resources/log4j2.xml)
  • [log4j2.xml](file://mp-protocol-bootstrap/src/main/resources/log4j2.xml)

API功能测试

通过调用API接口验证服务功能是否正常。主要测试以下功能:

  1. 健康检查: 访问/actuator/health端点确认服务健康状态
  2. 协议连接: 使用TCP客户端连接协议端口(如38001)测试协议监听器是否正常工作
  3. 核心业务API: 调用充电桩管理、枪管理等API验证业务功能

测试时应确保所有依赖服务(PostgreSQL、Redis、Kafka)都已正常运行,并且网络连接正常。

最近更新:: 2026/5/1 15:39
Contributors: feng
Prev
开发者指南
Next
消息队列集成