Architektur im Überblick
Quelldateien
Diese Seite wurde aus den folgenden Quelldateien erstellt:
- pom.xml
- nbcio-boot-base/pom.xml
- nbcio-boot-module-system/pom.xml
- nbcio-boot-module-flowable/pom.xml
- nbcio-boot-module-im/pom.xml
- nbcio-boot-module-im/src/main/java/com/nbcio/modules/im/domain/ImUser.java
- nbcio-boot-module-im/src/main/java/com/nbcio/modules/im/domain/ImMessage.java
- nbcio-boot-module-im/src/main/java/com/nbcio/modules/im/domain/ImDeptUser.java
- nbcio-boot-module-im/src/main/java/com/nbcio/modules/im/domain/ImChatGroup.java
- nbcio-boot-module-im/src/main/java/com/nbcio/modules/im/domain/ImUserFriend.java
- docker-compose.yml
- db/Dockerfile
- nbcio-boot-starter/pom.xml
- nbcio-module-estar/pom.xml
- nbcio-boot-module-demo/pom.xml
- nbcio-boot-module-system/Dockerfile
- nbcio-boot-base/nbcio-boot-base-api/pom.xml
- nbcio-boot-base/nbcio-boot-base-core/pom.xml
- nbcio-boot-base/nbcio-boot-base-tools/pom.xml
- nbcio-boot-starter/nbcio-boot-starter-job/pom.xml
Das Projekt nbcio-boot basiert auf einer modularen Monolith-Architektur, die auf Spring Boot 2.3.5.RELEASE und Spring Cloud Alibaba 2.2.3.RELEASE aufbaut. Die Architektur trennt konsequent zwischen Basis-Komponenten, Business-Modulen und technischen Startern, um eine hohe Wiederverwendbarkeit und lose Kopplung zu gewährleisten.
Modulare Projektstruktur
Das System ist als Maven Multi-Module-Projekt organisiert, wobei die übergeordnete POM-Datei alle Submodule zentral verwaltet. Die Struktur unterteilt sich in drei Hauptkategorien: Basis-Komponenten (nbcio-boot-base), Business-Module (nbcio-boot-module-*) und technische Starter (nbcio-boot-starter).
正在加载图表渲染器...
Die Modulstruktur ermöglicht eine klare Trennung der Verantwortlichkeiten. Das Parent-POM definiert die zentralen Module nbcio-boot-base, nbcio-boot-module-demo, nbcio-boot-module-system, nbcio-module-estar, nbcio-boot-module-flowable und nbcio-boot-module-im (pom.xml:55-65). Das Basis-Modul untergliedert sich weiter in API, Core und Tools (nbcio-boot-base/pom.xml:15-19), während die Starter-Module technische Querschnittsfunktionen wie Job-Scheduling, Distributed Locking und Message Queuing bereitstellen (nbcio-boot-starter/pom.xml:18-22).
Technologie-Stack und Framework-Integration
Kern-Frameworks und Versionen
Das Projekt nutzt Spring Boot 2.3.5.RELEASE als Fundament und integriert Spring Cloud Hoxton.SR8 sowie Spring Cloud Alibaba 2.2.3.RELEASE für Microservice-Fähigkeiten (pom.xml:8-20). Die Flowable Workflow-Engine in Version 6.7.2 wird für Geschäftsprozessautomatisierung eingesetzt (pom.xml:52).
| Technologie | Version | Verwendungszweck | Auswahlbegründung |
|---|---|---|---|
| Spring Boot | 2.3.5.RELEASE | Anwendungsframework | Stabile Basis mit umfangreichem Ökosystem |
| Spring Cloud Alibaba | 2.2.3.RELEASE | Microservice-Komponenten | Nacos für Service Discovery und Konfiguration |
| Flowable | 6.7.2 | Workflow-Engine | BPMN 2.0-konform, aktiv entwickelt |
| MyBatis-Plus | 3.x | ORM-Framework | Dynamische SQL-Generierung, Pagination |
| Shiro | 1.7.1 | Sicherheitsframework | Flexible Authentifizierung und Autorisierung |
| Redis | - | Caching und Sessions | Hohe Performance, verteilter Cache |
| XXL-Job | 2.2.0 | Job-Scheduling | Verteilte Task-Ausführung |
| MinIO | 8.0.3 | Objektspeicher | S3-kompatibel, selbst hostbar |
| Knife4j | 2.0.9 | API-Dokumentation | Erweiterte Swagger-UI |
Datenbank-Unterstützung
Das Core-Modul integriert Treiber für MySQL 8.0.27, PostgreSQL 42.2.6, Oracle 11.2.0.3 und SQL Server 4.0 (nbcio-boot-base/nbcio-boot-base-core/pom.xml:129-157). Diese Multi-Datenbank-Unterstützung ermöglicht den Einsatz in verschiedenen Unternehmensumgebungen ohne Code-Änderungen.
Sicherheitsarchitektur
Die Sicherheit basiert auf Apache Shiro in Kombination mit Redis für Session-Management (nbcio-boot-base/nbcio-boot-base-core/pom.xml:172-183). JWT (java-jwt) wird für zustandslose Authentifizierung in API-Szenarien verwendet (nbcio-boot-base/nbcio-boot-base-core/pom.xml:165-170). Die shiro-redis-Integration ermöglicht verteilte Sessions in Cluster-Umgebungen.
Domänenmodelle und Datenstrukturen
Instant Messaging Domäne
Das IM-Modul definiert mehrere Entitäten für die Chat-Funktionalität. Die ImUser-Klasse repräsentiert einen Benutzer mit Attributen wie ID, Avatar, Name, Signatur, Mobilnummer, E-Mail und Passwort (nbcio-boot-module-im/src/main/java/com/nbcio/modules/im/domain/ImUser.java:22-47). Die Annotation @TableField("username") mappt das loginName-Attribut auf die Datenbankspalte username, während @TableField("dept_id") die Department-Zuordnung realisiert.
java1// Auszug aus ImUser.java 2@TableId 3private String id; 4private String avatar; 5private String name; 6private String sign; 7private String mobile; 8private String email; 9private String password; 10@TableField("username") 11private String loginName; 12@TableField("dept_id") 13private String deptId;
Die ImMessage-Entität speichert Chat-Nachrichten mit Absender (fromName), Empfänger (toName), Sendezeit (sendTime), Inhalt (content) und Typ-Informationen (nbcio-boot-module-im/src/main/java/com/nbcio/modules/im/domain/ImMessage.java:22-60). Das type-Feld unterscheidet zwischen Einzelchat (0) und Gruppenchat (1), während readStatus den Lesestatus (1=gelesen, 0=ungelesen) trackt.
正在加载图表渲染器...
Die ImChatGroup-Klasse modelliert eine Chat-Gruppe mit Gruppennamen, Avatar und Administrator-Referenz (master) (nbcio-boot-module-im/src/main/java/com/nbcio/modules/im/domain/ImChatGroup.java:23-48). Die ImUserFriend-Entität stellt die Viele-zu-Viele-Beziehung zwischen Benutzern und deren Freunden her (nbcio-boot-module-im/src/main/java/com/nbcio/modules/im/domain/ImUserFriend.java:22-38).
Workflow-Domäne
Das Flowable-Modul integriert die Flowable-Engine 6.7.2 für BPMN 2.0-konforme Prozessautomatisierung (nbcio-boot-module-flowable/pom.xml:36-53). Die Engine wird als Kompilier-Abhängigkeit eingebunden, während flowable-spring-boot-starter-basic die Spring Boot-Integration bereitstellt. Das Modul bleibt unabhängig und referenziert nur das Core-Modul (nbcio-boot-module-flowable/pom.xml:22-26).
Abhängigkeiten der Anwendungsmodule
System-Modul als Integrationspunkt
Das nbcio-boot-module-system fungiert als zentrale Laufzeitumgebung für den monolithischen Betrieb. Es integriert die Business-Module Demo, Estar und IM als direkte Abhängigkeiten (nbcio-boot-module-system/pom.xml:106-126). Diese Architektur ermöglicht das Starten aller Funktionalitäten aus einer einzigen Anwendung heraus.
正在加载图表渲染器...
Das System-Modul bindet zudem spezialisierte Integrationen ein: JimuReport 1.4.0 für Reporting-Funktionalität (nbcio-boot-module-system/pom.xml:73-78), Jeewx-API 1.4.6 für WeChat-Integration (nbcio-boot-module-system/pom.xml:57-72) und DingTalk-SDKs für Enterprise-Messaging (nbcio-boot-module-system/pom.xml:84-102).
Modul-Abhängigkeitsanalyse
Das Estar-Modul demonstriert die typische Abhängigkeitsstruktur eines Business-Moduls: es referenziert nbcio-boot-base-core für Basis-Funktionalität und nbcio-boot-module-flowable für Workflow-Unterstützung (nbcio-module-estar/pom.xml:24-33). Das Demo-Modul folgt dem gleichen Muster (nbcio-boot-module-demo/pom.xml:22-32).
Das IM-Modul nutzt t-io WebSocket Server 3.7.0 für Echtzeit-Kommunikation (nbcio-boot-module-im/pom.xml:29-34) und Jedis 4.1.1 für Redis-Operationen (nbcio-boot-module-im/pom.xml:35-40). Diese technologische Wahl ermöglicht horizontale Skalierung der Chat-Funktionalität.
Datenfluss und Kommunikationsmuster
Nachrichtenaustausch im IM-Modul
正在加载图表渲染器...
Der Datenfluss für Instant Messaging beginnt mit einem WebSocket-Verbindungsaufbau über t-io. Nachrichten werden als JSON-Payload empfangen, in ImMessage-Objekte deserialisiert und in der Datenbank persistiert. Redis fungiert als Message Broker für die Verteilung an verbundene Clients. Bei Einzelchats wird die Nachricht direkt an den Empfänger zugestellt, während bei Gruppenchats die Mitglieder über ImChatGroup ermittelt und benachrichtigt werden.
Workflow-Prozessausführung
正在加载图表渲染器...
Workflow-Prozesse werden über die Flowable-Engine ausgeführt. BPMN 2.0-Definitionen werden deployt, Prozessinstanzen erstellt und User Tasks zugewiesen. Gateways steuern den Kontrollfluss basierend auf Geschäftsregeln, die über FEL (Fast Expression Language) ausgewertet werden (nbcio-boot-module-flowable/pom.xml:54-59).
Kern-Komponenten im Detail
nbcio-boot-base-core
Das Core-Modul stellt die zentrale Infrastruktur bereit. Es integriert:
- Sicherheit: Shiro-Spring-Boot-Starter 1.7.1 für Authentifizierung und Autorisierung
- Datenzugriff: MyBatis-Plus, Dynamic-Datasource für Multi-Tenancy
- Caching: Spring Data Redis mit Connection Pooling
- Datei-Storage: MinIO 8.0.3 für S3-kompatiblen Objektspeicher
- Cloud-Services: Aliyun OSS, Aliyun SMS SDK
Die Konfiguration erfolgt über Spring Boot Auto-Configuration, wobei das Modul als transitive Abhängigkeit von allen Business-Modulen eingebunden wird.
nbcio-boot-base-tools
Das Tools-Modul enthält wiederverwendbare Hilfskomponenten wie Hutool-Core für allgemeine Operationen (nbcio-boot-base/nbcio-boot-base-tools/pom.xml:38-41) und Spring Boot Starter Web für MVC-Funktionalität (nbcio-boot-base/nbcio-boot-base-tools/pom.xml:23-28). Redis-Integration wird über Spring Data Redis mit Commons Pool2 bereitgestellt (nbcio-boot-base/nbcio-boot-base-tools/pom.xml:29-37).
nbcio-boot-starter-job
Der Job-Starter kapselt XXL-Job-Core 2.2.0 für verteiltes Task-Scheduling (nbcio-boot-starter/nbcio-boot-starter-job/pom.xml:14-18). Diese Abstraktion ermöglicht die Konfiguration von Cron-basierten und Event-getriebenen Jobs ohne direkte Abhängigkeit zur XXL-Job-API in Business-Modulen.
Architekturentscheidungen und Design-Rationale
Monolith-First mit Microservice-Option
Die Architektur unterstützt sowohl monolithischen als auch Microservice-Betrieb. Das Parent-POM enthält auskommentierte Module für Cloud-Komponenten (pom.xml:62-64), und das System-Modul markiert Microservice-Abhängigkeiten als optional (nbcio-boot-module-system/pom.xml:134-136). Diese Entscheidung ermöglicht eine schrittweise Migration zu Microservices bei wachsenden Anforderungen.
Multi-Database-Strategie
Die Unterstützung für MySQL, PostgreSQL, Oracle und SQL Server (nbcio-boot-base/nbcio-boot-base-core/pom.xml:129-157) adressiert Enterprise-Anforderungen für Datenbankportabilität. Die Dynamic-Datasource-Komponente (pom.xml:30-31) ermöglicht zudem Multi-Tenancy-Szenarien mit separaten Datenbanken pro Mandant.
WebSocket über t-io statt Spring WebSocket
Die Entscheidung für t-io WebSocket Server (nbcio-boot-module-im/pom.xml:29-34) anstelle von Spring WebSocket begründet sich in der höheren Performance und besseren Cluster-Unterstützung von t-io. Die Bibliothek bietet integrierte Heartbeat-Mechanismen und automatische Wiederverbindung.
Flowable statt Activiti
Die Wahl von Flowable 6.7.2 (nbcio-boot-module-flowable/pom.xml:36-53) gegenüber Activiti basiert auf der aktiveren Community und schnelleren Release-Zyklen. Flowable ist ein Fork von Activiti und bietet erweiterte CMMN- und DMN-Unterstützung.
Konfiguration und Profile
Das Projekt definiert drei Umgebungsprofile: dev, test und prod (pom.xml:342-401). Jedes Profil konfiguriert Nacos-Adressen für Service Discovery und Konfigurationsmanagement:
- dev: Standardprofil mit lokaler Nacos-Instanz (127.0.0.1:8848)
- test: Testumgebung mit separatem Namespace
- prod: Produktionsumgebung mit leerem Profil-Namen
Die Konfigurationswerte werden zur Build-Zeit durch Maven Resource Filtering ersetzt (pom.xml:326-339), was environment-spezifische Builds ermöglicht.
Bekannte Einschränkungen
-
Java 8 Bindung: Das Projekt erfordert Java 1.8 (pom.xml:17), was moderne Java-Features einschränkt.
-
Spring Boot 2.3.x: Die Version 2.3.5.RELEASE (pom.xml:11) erhält keine aktive Unterstützung mehr, Sicherheitsupdates sollten evaluiert werden.
-
Log4j2-Override: Das Projekt überschreibt die Log4j2-Version auf 2.15.0 (pom.xml:50-51) als Reaktion auf die Log4Shell-Schwachstelle, sollte aber auf aktuellere Versionen aktualisiert werden.
-
System-scope Abhängigkeiten: DingTalk-SDKs werden mit
system-Scope eingebunden (nbcio-boot-module-system/pom.xml:85-97), was die Portabilität einschränkt und spezielle Build-Konfiguration erfordert.
