You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
eventmesh-runtime carries too many responsibilities and couples the core delivery path too tightly to infrastructure. A single module currently bundles:
For example, EventMeshApplication directly creates NacosMetaStore, RocksDBOffsetStore, and the HTTP/WS servers, then assembles the Runtime. eventmesh-runtime/build.gradle also depends directly on Netty, RocksDB, Nacos, and concrete protocol implementations.
Risks
The Runtime core cannot be embedded, unit-tested, or swapped easily.
Any protocol or infrastructure change can ripple into the core delivery path.
The module's claimed "minimal dependency surface" does not match its real dependencies.
Proposed direction
Keep eventmesh-runtime as a single module, but enforce an internal package partition — no new modules, since the module count is already too high:
org.apache.eventmesh.runtime.engine core delivery: UniRuntime / UniIngressService
org.apache.eventmesh.runtime.bootstrap configuration reading + assembly only
org.apache.eventmesh.runtime.http HTTP / SSE / WS servers
org.apache.eventmesh.runtime.state RocksDB-backed state (behind interfaces)
org.apache.eventmesh.runtime.meta Nacos-backed meta (behind interfaces)
UniRuntime / UniIngressService depend only on interfaces (OffsetStore, MetaStore, PushChannel, MeshStoragePlugin); the concrete NacosMetaStore / RocksDBOffsetStore / Netty implementations live in their own packages.
EventMeshApplication only reads configuration and wires components; it must not host core business decisions.
Problem
eventmesh-runtimecarries too many responsibilities and couples the core delivery path too tightly to infrastructure. A single module currently bundles:UniRuntime,UniIngressService,ReliableDispatcher);For example,
EventMeshApplicationdirectly createsNacosMetaStore,RocksDBOffsetStore, and the HTTP/WS servers, then assembles the Runtime.eventmesh-runtime/build.gradlealso depends directly on Netty, RocksDB, Nacos, and concrete protocol implementations.Risks
Proposed direction
Keep
eventmesh-runtimeas a single module, but enforce an internal package partition — no new modules, since the module count is already too high:UniRuntime/UniIngressServicedepend only on interfaces (OffsetStore,MetaStore,PushChannel,MeshStoragePlugin); the concreteNacosMetaStore/RocksDBOffsetStore/ Netty implementations live in their own packages.EventMeshApplicationonly reads configuration and wires components; it must not host core business decisions.A physical module split is not required at this stage — it is a follow-up only if hard compile-time isolation is needed later.
Acceptance criteria
UniRuntime/UniIngressServicehave no compile-time dependency on Netty, RocksDB, Nacos, or a concrete protocol plugin.enginepackage can be unit-tested without starting an HTTP server or Meta store.bootstraphas no delivery logic.engine→http/state/metaimports.Part of the Architecture Review.