Eunoia —— 源自希腊语 εὔνοια:美好的思维、善意、心态平和。
Euonia 是一个用于构建企业级 Java 应用的开发框架。它将**面向对象可扩展业务架构(OSBA)与领域驱动设计(DDD)**理念结合起来,为构建健壮、可维护的业务系统提供完整基础设施。该框架基于 Java 17+,可与 Spring Boot 4.x / Spring Framework 7.x 无缝集成。
Euonia 同时提供 .NET 版本,本仓库为 Java 版本。
graph TD
subgraph "Euonia Java"
direction TB
DDD --> Core
DDD --> UoW
DDD --> Pipeline
OSBA --> Core
UoW --> Core
Pipeline --> Core
Spring --> Core
Spring --> UoW
Spring --> OSBA
Spring --> Pipeline
BusAbstract --> Core
BusCore --> BusAbstract
BusCore --> Core
BusCore --> Pipeline
BusInmemory --> BusAbstract
BusInmemory --> Core
BusRabbitmq --> BusAbstract
BusRabbitmq --> Core
BusKafka --> BusAbstract
Sample --> DDD
Sample --> OSBA
Sample --> Pipeline
Sample --> Spring
end
style Core fill:#4A90D9,color:#fff
style DDD fill:#50B86C,color:#fff
style UoW fill:#1F6FEB,color:#fff
style OSBA fill:#E8833A,color:#fff
style Pipeline fill:#E74C3C,color:#fff
style Spring fill:#2ECC71,color:#fff
style BusAbstract fill:#F39C12,color:#fff
style BusCore fill:#E67E22,color:#fff
style BusInmemory fill:#D35400,color:#fff
style BusRabbitmq fill:#C0392B,color:#fff
style BusKafka fill:#8E44AD,color:#fff
style Sample fill:#9B59B6,color:#fff
基础核心库:提供基类、ID 生成、反射工具、元组、HTTP 异常、安全能力与验证注解。
| 包 | 说明 |
|---|---|
com.euonia.core |
统一 ObjectId(支持 Snowflake、UUID、ULID、Random)、SnowflakeId、ULID、ShortUniqueId、Singleton<T>、PriorityQueue、Pair<L,R> |
com.euonia.tuple |
不可变强类型元组:Solo、Duet、Trio、Quartet、Quintet、Sextet、Septet、Octet、Nonet、Decet |
com.euonia.http |
HTTP 状态异常:BadRequestException(400)、UnauthorizedAccessException(401)、ForbiddenException(403)、ResourceNotFoundException(404)、ConflictException(409)等 |
com.euonia.security |
UserPrincipal、UserClaimTypes、AuthenticationException、CredentialException、UnauthorizedAccessException |
com.euonia.annotation |
@Required、@Validator、@Validation —— 字段校验元数据 |
com.euonia.reflection |
TypeHelper、GenericType<T>、@DisplayName |
领域驱动设计抽象:实体、聚合、值对象、领域事件、命令、应用服务、用例与审计支持。
| 包 | 类 | 作用 |
|---|---|---|
com.euonia.domain |
Entity<ID> / EntityBase<ID> |
领域实体的接口与抽象基类(含标识) |
com.euonia.domain |
Aggregate<ID> / AggregateBase<ID> |
聚合根与领域事件管理(raiseEvent、clearEvents、attachEvents) |
com.euonia.domain |
HasDomainEvents |
管理领域事件和事件处理器的聚合契约 |
com.euonia.domain |
ValueObject<T> |
不可变值对象,基于反射实现 equals、hashCode、compareTo |
com.euonia.domain.event |
Event / EventBase |
核心事件契约:id、sequence、intent、originator 元数据 |
com.euonia.domain.event |
DomainEvent / DomainEventBase |
领域事件,支持聚合挂载与 EventAggregate 映射 |
com.euonia.domain.event |
ApplicationEvent / ApplicationEventBase |
应用层(集成)事件基类 |
com.euonia.domain.event |
EventAggregate |
聚合形态的事件数据:id、eventId、typeName、originator、timestamp、sequence |
com.euonia.domain.command |
Command / CommandBase |
命令模式抽象:Command 继承 Unicast(消息总线集成),CommandBase 提供基类实现 |
com.euonia.domain.auditing |
@Audited / AuditRecord / AuditStore |
领域对象变更审计支持 |
com.euonia.application |
ApplicationService / BaseApplicationService |
应用服务标记接口与含依赖解析的基类 |
com.euonia.usecase |
UseCase<I,O> / UseCasePresenter |
输入/输出用例契约与响应式结果发布 |
com.euonia.usecase |
UseCaseSuccess / UseCaseFailure |
成功与失败输出端口 |
Unit of Work 抽象:定义事务边界、提交/回滚生命周期与一致性的持久化编排。
| 类 / 接口 | 作用 |
|---|---|
IUnitOfWork |
UoW 契约,包含生命周期方法(saveChanges、commit、rollback) |
IUnitOfWorkManager |
创建并管理当前 UoW 作用域 |
UnitOfWork |
默认 UoW 实现 |
UnitOfWorkBase |
共享事务流程的基类 |
UnitOfWorkInterceptor |
拦截应用流程并附加 UoW 边界 |
IUnitOfWorkAccessor |
访问当前激活的 UoW 上下文 |
受 ASP.NET Core 启发的中间件管道框架:统一的
Pipeline<TRequest, TResponse>,支持可链式的行为拼装、委托与依赖注入集成。
| 接口 / 类 | 说明 |
|---|---|
Pipeline<TRequest, TResponse> |
管道构建器:通过 use() 链接组件、构建委托并异步执行 |
PipelineBase<TRequest, TResponse> |
抽象基类:组件注册、反向链构建、@PipelineBehaviors 注解支持 |
PipelineDelegate<TRequest, TResponse> |
@FunctionalInterface:CompletionStage<TResponse> invoke(TRequest request) |
PipelineBehavior<TRequest, TResponse> |
行为接口:CompletionStage<TResponse> handleAsync(TRequest, PipelineDelegate<TRequest, TResponse>) |
PipelineFactory / DefaultPipelineFactory |
创建 Pipeline<TRequest, TResponse> 的工厂 |
DefaultPipelineProvider<TRequest, TResponse> |
默认实现,通过 ServiceProvider 解析行为(反射或 DI) |
@PipelineBehaviors |
按上下文类型自动附加行为的注解 |
关键特性:
- Fluent API:支持通过
.use()以 lambda、类或@PipelineBehaviors自动发现方式拼装行为 - 单一
Pipeline<TRequest, TResponse>同时覆盖即发即忘(Pipeline<Object, Void>)和类型化请求/响应场景 - 基于委托的组合,采用反向链构建(最内层先执行)
ServiceProvider抽象支持独立运行与 Spring 集成- 全链路异步(
CompletionStage)
// 创建一个管道
Pipeline<Object, Void> pipeline = new DefaultPipelineProvider<>(resolver)
.use((ctx, next) -> next.invoke(ctx).thenRun(() -> System.out.println("Log: done")))
.use(LoggingBehavior.class);
// 运行
pipeline.runAsync(new MyContext()).toCompletableFuture().join();消息总线抽象契约层:定义消息信封、上下文、约定、传输策略、注解、抽象传输接口、收件箱/发件箱/死信队列抽象。所有总线模块的扩展基础。依赖
core。
核心契约
| 类 / 接口 | 作用 |
|---|---|
MessageEnvelope<T> |
信封契约接口(messageId、correlationId、conversationId、requestTrackId、channel、payload) |
MessageContext |
运行时上下文:消息访问、响应发送(response)、失败通知(failure)、完成回调(complete) |
MessageContextBase |
MessageContext 默认实现:基于 SubmissionPublisher 的响应/完成事件流 |
MessageMetadata |
强类型元数据映射(Map<String,Object>),支持 get(key, Class<T>) |
MessageHeaders |
头信息常量:MESSAGE_ID、CORRELATION_ID、CONVERSATION_ID、CONTENT_TYPE、REQUEST_TRACE_ID、AUTHORIZATION |
HandlerContext |
处理器上下文契约:订阅事件、异步调用(handleAsync) |
HandlerRegistration |
Record — 不可变注册元组:channel + messageType + handlerType + method |
Configurator |
全局配置契约:约定构建器、策略构建器(按传输名)、处理器注册列表 |
Dispatcher |
分发器契约:List<String> determine(Class<?>) — 消息类型 → 传输名列表 |
MessageConventionType |
枚举:NONE、UNICAST、MULTICAST、REQUEST |
MessageSerializer |
消息序列化契约接口 |
收件箱 / 发件箱 / 死信队列(inbox / outbox / dlq)
| 类 / 接口 | 作用 |
|---|---|
InboxStore |
收件箱持久化接口,用于消息去重(幂等性),支持 insert / markAsSuccess / markAsFailed |
InboxEntry |
收件箱条目:messageId、channel、messageType、handles、createdAt |
InboxHandle |
处理器状态记录:handler 名称、状态(PENDING / SUCCESS / FAILED)、重试次数 |
OutboxStore |
发件箱持久化接口:insert / markAsPublished、事务性消息保证 |
OutboxEntry |
发件箱条目:messageId、channel、payload、状态、创建/更新时间 |
DeadLetterMessage |
死信消息实体:原始消息、错误信息、失败时间、重试次数 |
接收者(Recipient)
| 接口 | 作用 |
|---|---|
Recipient |
基础契约:getName();继承 AutoCloseable |
Executor |
标记子接口:单播/请求执行者 |
Subscriber |
标记子接口:多播订阅者 |
RecipientRegistrar |
接收者注册器:register(List<HandlerRegistration>, defaultTransport) |
契约接口(标记)
| 接口 | 作用 |
|---|---|
Unicast |
标记接口:点对点单播消息 |
Multicast |
标记接口:发布-订阅多播消息 |
Request<R> |
标记接口:请求-响应消息,响应类型为 R |
Transport |
传输抽象:getName()、publishAsync、sendAsync、callAsync |
注解(十种)
| 注解 | 目标 | 作用 |
|---|---|---|
@Subscribe |
方法 | 声明处理器方法;value = 通道,group = 消费者组 |
@Channel |
类型 | 覆盖默认通道名(默认全限定类名) |
@Unicast |
类型 | 标记为单播消息 |
@Multicast |
类型 | 标记为多播消息 |
@Request |
类型 | 标记为请求-响应,含 responseType() |
@LocalMessage |
类型 | 标记仅本地传输 |
@DistributedMessage |
类型 | 标记仅分布式传输 |
@DispatchIn |
类型 | 约束出站传输(transports()) |
@ReceiveIn |
类型 | 约束入站传输(transports()) |
@Enqueue |
类型 | 队列名 + 优先级 |
事件体系
| 类 | 作用 |
|---|---|
MessageProcessedEvent |
基础事件:消息 + 上下文 + MessageProcessType |
MessageDeliveredEvent |
消息已投递 |
MessageReceivedEvent |
消息已接收 |
MessageAcknowledgedEvent |
消息已确认 |
MessageRepliedEvent |
消息已回复(含响应载荷) |
MessageHandledEvent |
消息已处理(含处理器类型) |
MessageSubscribedEvent |
订阅元数据 |
MessageProcessType |
枚举:SEND、DELIVERED、RECEIVED、ACKNOWLEDGED、REPLIED、HANDLED |
异常层次
| 类 | 作用 |
|---|---|
MessageTypeException |
无效/未分类的消息类型 |
MessageProcessingException |
处理失败 |
MessageDeliverException |
投递失败 |
MessageTransportException |
传输层失败 |
消息总线运行时编排层:处理器发现、注册、分发、约定实现、策略实现、路由消息与总线 API。依赖
bus-abstract和pipeline,将所有抽象契约组合为可用的消息总线引擎。
核心类
| 类 / 接口 | 作用 |
|---|---|
Bus |
顶层总线接口:publishAsync(多播)、sendAsync(单播)、callAsync(请求-响应),以及流式构建器 publish() / send() / call() |
MessageBus |
Bus 实现 — 编排引擎:类型校验 → 上下文解析 → 信封构建 → 管道执行 → 分发决策 → 传输投递 |
RoutedMessage<T> |
传输信封:负载 + messageId / correlationId / conversationId / requestTrackId / channel / authorization / timestamp / metadata |
Handler<M,R> |
类型化处理器:R handle(M message, MessageContext context) |
StrategicDispatcher |
Dispatcher 实现:策略匹配 + 基数校验 + 缓存,未匹配时回退到 defaultTransport |
DefaultHandlerContext |
HandlerContext 实现:通道维度处理器注册、异步调用(单处理器→响应/失败,多处理器→并行扇出) |
DefaultConfigurator |
Configurator 实现:流式配置约定/策略/处理器(四种注册方式:直接、类型、列表、包名) |
MessageHandlerFinder |
自动发现:@Subscribe 注解方法 + Handler<M,R> 接口实现 |
ChannelRegistrar |
通道注册器:按通道名管理 MessageHandlerContext 列表,支持多处理器并行 |
约定与策略实现
| 类 / 接口 | 作用 |
|---|---|
MessageConvention |
契约:isUnicast(String channel)、isMulticast(String channel)、isRequest(String channel) |
DefaultMessageConvention |
基于接口标记的约定:实现 Unicast / Multicast / Request<R> 接口 |
AnnotationMessageConvention |
基于注解的约定:标注 @Unicast / @Multicast / @Request |
BaseMessageConvention |
组合约定引擎:聚合多个约定,带 ConcurrentHashMap 缓存 |
OverridableMessageConvention |
包装约定,支持谓词覆写分类结果 |
DefaultMessageConventionBuilder |
流式构建器 |
TransportStrategy |
契约:outgoing(Class<?>)、incoming(Class<?>) |
BaseTransportStrategy |
组合策略引擎:聚合多个策略,带缓存 |
DefaultTransportStrategy |
中性默认策略(始终返回 false) |
AnnotationTransportStrategy |
匹配 @DispatchIn / @ReceiveIn 注解 |
LocalMessageTransportStrategy |
匹配 @LocalMessage 标注的类型 |
DistributedMessageTransportStrategy |
匹配 @DistributedMessage 标注的类型 |
OverridableTransportStrategy |
包装策略,支持谓词覆写 |
DefaultTransportStrategyBuilder |
策略流式构建器 |
幂等性 & 管道行为
| 类 | 作用 |
|---|---|
IdempotentHandler |
幂等处理器装饰器:处理消息前检查 InboxStore,防止重复处理;内置定时重试已失败消息 |
InboxPipelineBehavior |
管道行为:消息处理后自动更新收件箱状态(成功/失败) |
流式构建器
| 类 | 作用 |
|---|---|
SendBuilder |
单播发送构建器:withCorrelationId() → withChannel() → executeAsync() |
PublishBuilder |
多播发布构建器:withChannel() → executeAsync() |
CallBuilder |
请求-响应构建器:withCorrelationId() → withChannel() → executeAsync() |
消息总线三类操作
| 操作 | 方法 | 消息类型 | 传输策略 | 返回值 |
|---|---|---|---|---|
| 发布 | publishAsync / publish() |
Multicast |
多个传输并行发送 | CompletableFuture<Void> |
| 发送 | sendAsync / send() |
Unicast |
单个传输 | CompletableFuture<Void> 或含 Flow.Subscriber<R> |
| 调用 | callAsync / call() |
Request<R> |
单个传输 | CompletableFuture<R> |
辅助类型
| 类 | 作用 |
|---|---|
MessageBusOptions |
总线全局选项:约定、策略、默认传输、管道行为开关 |
ExtendableOptions |
选项基类:messageId / channel / queue / priority / requestTraceId |
PublishOptions |
发布操作选项 |
SendOptions |
发送操作选项(含 correlationId) |
CallOptions |
调用操作选项(含 correlationId) |
PipelineMessage<M,R> |
管道行为集成:绑定消息 + Pipeline,支持 .use() 追加行为 |
MessageCache |
线程安全单例:消息类型 ↔ 通道名缓存(@Channel 优先,否则全限定类名) |
MessageHandler / MessageHandlerFactory |
内部类型擦除处理器抽象与工厂 |
关键特性:
- 通过
@Subscribe方法或Handler<M,R>接口自动发现处理器 - 单处理器通道支持请求/响应(Unicast / Request);多处理器通道并行执行(Multicast)
TransportStrategy系统映射消息类型到传输方式(Local vs Distributed)- 与
Pipeline集成,支持中间件风格的消息处理(日志、验证、转换、幂等) - 内置
IdempotentHandler+InboxPipelineBehavior实现消息去重与幂等消费 - 流式构建器 API(
bus.publish(msg).withChannel("orders").executeAsync())
进程内内存传输适配器 — 完整的
Transport实现。提供无需外部中间件的纯内存消息分发,适用于开发测试、单进程集成及超低延迟场景。依赖bus-abstract和core。
核心类
| 类 | 作用 |
|---|---|
InMemoryTransport |
Transport 实现:publishAsync → WeakReferenceMessenger;sendAsync / requestAsync → StrongReferenceMessenger |
InMemoryRecipientRegistrar |
RecipientRegistrar 实现:按 MessageConvention 分类,将处理器注册映射为接收者 + 信使注册 |
InMemoryRecipient |
接收者基类:receive → ReceivedEvent → handleAsync → AcknowledgedEvent |
InMemoryUnicastRecipient |
Executor:单播接收者 |
InMemoryMulticastRecipient |
Subscriber:多播接收者 |
InMemoryRequestRecipient |
Executor:请求-响应接收者 |
MessagePack |
传输信封:RoutedMessage + MessageContext + aborted 标志 |
信使引擎(Messenger)
| 类 | 引用类型 | 用途 |
|---|---|---|
StrongReferenceMessenger |
强引用 | Unicast / Request —— 按消息类精确匹配,快照迭代,身份键防重复 |
WeakReferenceMessenger |
WeakReference |
Multicast —— 弱引用接收者,GC 自动退订,cleanup 扫描清理 |
映射规则: Unicast → InMemoryUnicastRecipient → StrongMessenger;Multicast → InMemoryMulticastRecipient → WeakMessenger;Request → InMemoryRequestRecipient → StrongMessenger。
RabbitMQ 传输适配器 — 完整的
Transport实现。通过 RabbitMQ 代理提供分布式消息分发,支持队列、交换器、路由键映射与基于 Failsafe 的重试策略。依赖bus-abstract、core和com.rabbitmq:amqp-client:5.31.0。
核心类
| 类 | 作用 |
|---|---|
RabbitMqTransport |
Transport 实现:publishAsync → 扇出交换器广播;sendAsync → 队列单播;callAsync → RPC 调用并等待响应;内置 Failsafe 重试 |
RabbitMqRecipientRegistrar |
RecipientRegistrar 实现:按 MessageConvention 分类,将处理器注册映射为队列消费者 + 主题订阅者 |
RabbitMqRecipient |
接收者基类:接收消息 → 触发事件 → 异步处理 → 确认 |
RabbitMqQueueConsumer |
队列消费者:监听指定队列,反序列化消息并交付处理 |
RabbitMqTopicSubscriber |
主题订阅者:绑定交换器与路由键,接收多播消息 |
RabbitMqRequestExecutor |
RPC 执行器:处理请求-响应模式,支持 replyTo 回调 |
RabbitMqBusOptions |
RabbitMQ 特定选项:连接工厂、交换器名、队列前缀、重试策略配置 |
RabbitMqConstants |
常量定义:默认交换器名、队列前缀、超时时间、重试参数 |
RabbitMqReplyType |
响应类型枚举 |
映射规则: Unicast → RabbitMqQueueConsumer;Multicast → RabbitMqTopicSubscriber;Request → RabbitMqRequestExecutor。
Kafka 传输适配器 — 完整的
Transport实现。通过 Apache Kafka 代理提供分布式消息分发,支持主题、消费者组与基于 Failsafe 的重试策略。依赖bus-abstract、core和org.apache.kafka:kafka-clients。
核心类
| 类 | 作用 |
|---|---|
KafkaTransport |
Transport 实现:publishAsync → 主题广播;sendAsync → 主题单播(分区键路由);callAsync → RPC 调用并等待响应;内置 Failsafe 重试 |
KafkaRecipientRegistrar |
RecipientRegistrar 实现:按 MessageConvention 分类,将处理器注册映射为主题消费者 + 请求执行者 |
KafkaRecipient |
接收者基类:接收消息 → 触发事件 → 异步处理 → 确认 |
KafkaTopicSubscriber |
主题订阅者:加入消费者组,接收多播消息 |
KafkaQueueConsumer |
队列消费者:监听主题,反序列化消息并交付处理 |
KafkaRequestExecutor |
RPC 执行器:处理请求-响应模式 |
KafkaBusOptions |
Kafka 特定选项:Bootstrap Server、消费者组、重试策略配置 |
KafkaConstants |
常量定义:默认主题前缀、消费者组、超时时间、重试参数 |
映射规则: Unicast → KafkaQueueConsumer;Multicast → KafkaTopicSubscriber;Request → KafkaRequestExecutor。
Spring 集成模块。通过
ApplicationContext与ServiceProvider建立桥接,为 Pipeline 及其它 Euonia 组件提供无缝依赖注入。
| 类 | 说明 |
|---|---|
ApplicationContextServiceProvider |
基于 Spring ApplicationContext 的 ServiceProvider 实现,支持 getBeanProvider、autowireBean 与构造参数创建 |
ServiceProviderConfiguration |
Spring @Configuration,自动注册 ServiceProvider Bean |
关键特性:
- 为 Pipeline 与其它 Euonia 组件提供 Spring DI 能力
- 自动注入 Spring 管理的 Bean 到 Pipeline 委托/行为
- 提供带自动装配的反射构建兜底能力
- 极简接入:
@Import(ServiceProviderConfiguration.class)或组件扫描
面向对象可扩展业务架构:提供富业务对象模型,支持规则校验、属性变更追踪、状态管理与反射驱动工厂。
BusinessObject<B> — 核心:规则、上下文、属性管理
└── ObservableObject<T> — 状态跟踪:NEW / CHANGED / DELETED
├── EditableObject<T> — 支持异步规则校验与保存
├── ReadOnlyObject<T> — 带权限控制的只读对象
└── ExecutableObject<T> — 模板化执行对象
| 概念 | 说明 |
|---|---|
| BusinessContext | 服务定位与对象工厂上下文;负责注入上下文与初始化规则 |
| PropertyInfo | 强类型属性元数据:名称、类型、友好名、默认值、字段引用 |
| FieldDataManager | 实例级反射字段值管理 |
| Rule System | 异步规则校验,基于 RuleManager(类型级单例)与 Rules(实例级执行器) |
| ObjectEditState | 生命周期状态机:NONE → NEW → CHANGED → DELETED |
| ObjectFactory | 反射驱动 CRUD 工厂:@FactoryCreate、@FactoryFetch、@FactoryInsert、@FactoryUpdate、@FactoryDelete、@FactoryExecute |
protected void addRules() {
getRules().addRule(new LambdaRule<>(age, (a, ctx) -> a != null && a >= 18, "Must be 18+"));
}| 类 | 说明 |
|---|---|
Rule |
接口:getName()、getProperty()、getPriority()、executeAsync(RuleContext) |
LambdaRule<T> |
基于 Lambda:(value, context) → boolean |
RegularRule |
基于方法执行 |
RequiredRule |
非空属性校验 |
BrokenRule / BrokenRuleCollection |
校验结果集合,含严重级别(ERROR/WARNING/INFO) |
RuleCheckException |
校验失败时抛出 |
sample 模块演示了 Euonia 与 Spring Boot 4.1 的完整集成,包含 CQRS 命令查询职责分离与消息总线:
| 组件 | 说明 |
|---|---|
SampleApplication |
Spring Boot 入口 |
User 聚合 |
基于 EditableObject<User>,使用 @FactoryCreate、自定义规则与 Snowflake ID |
UserCreateCommand / UserUpdateCommand |
CQRS 命令对象,继承 CommandBase(通过消息总线单播发送) |
UserCreateCommandHandler / UserUpdateCommandHandler |
命令处理器,通过 @Subscribe 注解注册到消息总线 |
UserCreatedEvent(领域事件) |
聚合内领域事件 |
UserCreatedEto(集成事件) |
跨服务集成事件(Event Transfer Object),通过 RabbitMQ 发布 |
UserCreatedEventHandler |
集成事件处理器 |
UserApplicationService |
应用服务契约接口 |
UserApplicationServiceImpl |
应用服务实现,通过 Bus.send() 发送命令 |
UserController |
REST API:POST /api/user、GET /api/user/{id} |
PipelineController |
Pipeline 演示端点 |
MessageBusConfiguration |
消息总线 Spring 配置:注册 RabbitMQ + InMemory 双传输、Jackson JSON 序列化器、消息约定/策略/处理器 |
HttpContextFilter |
请求上下文过滤器 |
GlobalExceptionHandler |
全局异常处理 |
UserRepository |
Spring Data JPA 仓储 |
| 类别 | 技术 |
|---|---|
| 语言 | Java 17+(sample 使用 Java 25) |
| 框架 | Spring Boot 4.1(Spring MVC、Spring Data JPA、Spring Framework 7.0) |
| 数据库 | MySQL、H2(内存模式) |
| 消息系统 | RabbitMQ(分布式)、InMemory(本地)双传输 |
| API 文档 | SpringDoc OpenAPI 3.0 |
| 构建 | Maven |
| ID 生成 | Snowflake、UUID、ULID |
| Pipeline | 自定义中间件管道(责任链 / middleware 模式) |
| DI 集成 | 基于 ServiceProvider 的 Spring ApplicationContext 集成 |
| CQRS | 命令(Command)/ 事件(Event)分离,通过消息总线分发 |
| 幂等性 | 基于 InboxStore 的 IdempotentHandler 消息去重 |
<!-- 核心工具 -->
<dependency>
<groupId>com.euonia</groupId>
<artifactId>core</artifactId>
<version>10.0.0</version>
</dependency>
<!-- Pipeline 中间件 -->
<dependency>
<groupId>com.euonia</groupId>
<artifactId>pipeline</artifactId>
<version>10.0.0</version>
</dependency>
<!-- Spring 集成 -->
<dependency>
<groupId>com.euonia</groupId>
<artifactId>spring</artifactId>
<version>10.0.0</version>
</dependency>
<!-- 业务对象(OSBA) -->
<dependency>
<groupId>com.euonia</groupId>
<artifactId>osba</artifactId>
<version>10.0.0</version>
</dependency>
<!-- 领域驱动设计(DDD) -->
<dependency>
<groupId>com.euonia</groupId>
<artifactId>domain-driven-design</artifactId>
<version>10.0.0</version>
</dependency>
<!-- 消息总线(抽象层) -->
<dependency>
<groupId>com.euonia</groupId>
<artifactId>bus-abstract</artifactId>
<version>10.0.0</version>
</dependency>
<!-- 消息总线(核心运行时) -->
<dependency>
<groupId>com.euonia</groupId>
<artifactId>bus-core</artifactId>
<version>10.0.0</version>
</dependency>
<!-- 消息总线(内存传输) -->
<dependency>
<groupId>com.euonia</groupId>
<artifactId>bus-inmemory</artifactId>
<version>10.0.0</version>
</dependency>
<!-- 消息总线(RabbitMQ 传输) -->
<dependency>
<groupId>com.euonia</groupId>
<artifactId>bus-rabbitmq</artifactId>
<version>10.0.0</version>
</dependency>
<!-- 消息总线(Kafka 传输) -->
<dependency>
<groupId>com.euonia</groupId>
<artifactId>bus-kafka</artifactId>
<version>10.0.0</version>
</dependency>// 定义业务对象
@Component @Scope("prototype")
public class Order extends EditableObject<Order> {
private final PropertyInfo<String> productName = registerProperty(String.class, "productName");
@FactoryCreate
protected void create(String productName) {
super.create();
setProductName(productName);
setId(ObjectId.snowflake().getValue(Long.class));
}
@Override
protected void addRules() {
getRules().addRule(new RequiredRule(productName));
}
}
// 使用工厂
@Autowired
private ObjectFactory factory;
var order = factory.create(Order.class, "Widget");
order.save(false);# 构建全部模块
mvn clean install
# 运行示例应用
cd sample
mvn spring-boot:run- GitHub: https://github.com/euonia-project/euonia-java
- .NET 版本: https://github.com/euonia-project/euonia-dotnet
感谢 JetBrains 通过其 开源免费许可证计划 提供 全家桶产品支持。
