Preise

Architektur im Überblick

Quelldateien

Diese Seite wurde aus den folgenden Quelldateien erstellt:

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).

TechnologieVersionVerwendungszweckAuswahlbegründung
Spring Boot2.3.5.RELEASEAnwendungsframeworkStabile Basis mit umfangreichem Ökosystem
Spring Cloud Alibaba2.2.3.RELEASEMicroservice-KomponentenNacos für Service Discovery und Konfiguration
Flowable6.7.2Workflow-EngineBPMN 2.0-konform, aktiv entwickelt
MyBatis-Plus3.xORM-FrameworkDynamische SQL-Generierung, Pagination
Shiro1.7.1SicherheitsframeworkFlexible Authentifizierung und Autorisierung
Redis-Caching und SessionsHohe Performance, verteilter Cache
XXL-Job2.2.0Job-SchedulingVerteilte Task-Ausführung
MinIO8.0.3ObjektspeicherS3-kompatibel, selbst hostbar
Knife4j2.0.9API-DokumentationErweiterte 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.

java
1// 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

  1. Java 8 Bindung: Das Projekt erfordert Java 1.8 (pom.xml:17), was moderne Java-Features einschränkt.

  2. 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.

  3. 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.

  4. 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.