[ISSUE #5411] Serve the legacy SDK gRPC protocol on the v2 runtime (port 10205 bridge) + connector plugin tests 23/23 (#5412) * [ISSUE #5411] Serve the legacy SDK gRPC protocol on the v2 runtime (port 10205 bridge) EventMeshGrpcServer binds PublisherService/ConsumerService/HeartbeatService on eventmesh.grpc.port (opt-in, 0/-1 = off) and maps every call onto the v2 UniIngressService pipeline (WAL at-least-once, shared retry/DLQ): - publish/batchPublish/publishOneWay/batchPublishOneWay -> ingress.publish (topic = subject) - requestReply -> ingress.request with the legacy TTL attribute - webhook subscribe -> WebHookChannel target; CLUSTERING->LOAD_BALANCE, BROADCASTING->BROADCAST - subscribeStream (bidi) -> GrpcStreamChannel push target, ACKs ride back on the stream - heartbeat -> GrpcClientRegistry TTL refresh + reaper unsubscribes stale clients GrpcCloudEventMapper holds the proto<->v2 CloudEvent mapping + legacy Response envelope. ruleGrpcProtocolHidden grants the sanctioned runtime.grpc.. adapter (TCP-rule precedent). * [ISSUE #5411] gRPC bridge tests: hermetic mapping unit tests + real-SDK integration GrpcCloudEventMapperTest covers every proto attribute flavor + the 3-key response envelope. GrpcLegacyBridgeIntegrationTest boots the bridge over the in-memory storage and drives it with the real EventMeshGrpcProducer/Consumer (the SDK as its own conformance suite): publish, batch publish, stream subscription round-trip. * Add unit tests for the remaining 19 connector plugins (23/23 coverage) Hermetic where possible: webhook sinks (dingtalk/http/knative/lark/slack/wechat/ wecom/chatgpt) verified against a local capturing HTTP server; mcp (JSON-RPC envelope), openfunction (Ce-* context headers), prometheus (single merged push), spring (EventForwarder contract) exercised with their exact wire contracts; webhook sources (10 plugins) POST their native callback payloads through the lazy-bound hook port; prometheus/spring sources cover scrape + buffer drains; external-client plugins (canal/jdbc/mongodb/rabbitmq/redis/s3/pravega) get contract-level tests (init config-parse where lazy, commit no-op) since their backends cannot boot in CI. Closes the "4 of 23 plugins carry the only unit tests" gap tracked under the #5296 review. * [ISSUE #5411] docs: legacy gRPC bridge served (opt-in); Connector Runtime test status configuration.md flips eventmesh.grpc.port from RESERVED to served (opt-in, 1.x default 10205); protocols.md gains the legacy-gRPC mapping table section; both READMEs note the served bridge and update the Connector Runtime row to 23/23 plugin test coverage (drops the stale "4 of 23" wording). * docs: make the Connector Runtime GA-criteria cell concrete Replace the vague "GA criteria tracked under the #5296 architecture review" wording with the actual remaining GA blockers: per-plugin real-backend integration tests and the connector-runtime HA story. Also reference #5412 for the 23/23 unit-test coverage. * docs: refresh remaining cross-references for the #5411 bridge and 23/23 tests - deployment.md: connector-runtime status drops the stale "only 4 of 23 plugins carry unit tests" (now 23/23 since #5412; real-backend ITs stay the GA gate) - architecture/overview.md: protocol-status bullet + legacy-SDK paragraph mention the served opt-in gRPC bridge; Key-classes table gains the EventMeshGrpcServer entry - quickstart/getting-started.md: port list mentions the opt-in 10205 legacy gRPC bridge
๐ฆ Documentation | ๐ Examples | โ๏ธ Roadmap | ๐ ็ฎไฝไธญๆ
Apache EventMesh is a new generation serverless event middleware for building distributed event-driven applications.
EventMesh adopts a unified CloudEvents-over-MQ architecture. The message queue (MQ) acts as a pure write-ahead log (WAL) for durable storage only โ there are no consumer groups, no tags, and no broker-side subscription semantics. Instead, the stateless EventMesh Runtime owns all delivery logic: its SubscriptionManager maintains the subscription registry and offset tracking, and dispatches events with load-balance, broadcast, and multicast semantics. Applications interact through a lightweight HTTP + CloudEvents 1.0 SDK (publish / subscribe / unsubscribe), while integration with external systems runs in a standalone Connector Runtime via the connector SPI.
Apache EventMesh is packed with features that help users build event-driven applications with ease. Here are the highlights that set EventMesh apart:
Core architecture
publish, subscribe, unsubscribe); no heavyweight client, no vendor lock-in.Extensibility & ecosystem
MeshStoragePlugin SPI.Each EventMesh surface carries an explicit maturity status. The table below is the single source of truth โ module-level docs link here instead of restating their status. See docs for the per-capability guides.
| Capability | Status | Recommendation | Migration target |
|---|---|---|---|
| HTTP + CloudEvents | GA target | Recommended โ the primary user path (CloudEventsClient + /events/*) | Primary path |
| Kafka / RocketMQ storage (4.x, 5.x) | GA target | Recommended โ pluggable WAL backends, TCK-covered (MeshStoragePluginTCK) | Primary path |
| Memory storage (default) | Beta | Zero-dependency dev/CI/quick-start backend (docker run apache/eventmesh with no broker); state is process-local โ not for production | Switch EVENTMESH_STORAGE_TYPE to kafka / rocketmq / rocketmq5 |
| SSE / WebSocket push | Beta | Usable โ integration-tested; ACK-tracked redelivery + DLQ are shared with long-polling (same ReliableDispatcher), e2e-real-broker suite in #5389 | Unified push transports |
| Connector Runtime | Beta | Usable โ working end-to-end; all 23 plugins fully implemented since #5394 (no template stubs left), data-loss hardening in #5328; unit tests cover all 23 plugins since #5412 | Promote to GA once the remaining #5296 review items land (real-backend integration tests per plugin, connector-runtime HA story) |
| A2A / Agent Gateway | Beta | Usable โ task store + runtime bridge (#5302/#5304), task reaper + Meta-backed agent cards in #5346, quota classification in #5373; the Testcontainers E2E gate (#5340) closed in September 2026 | Unified Runtime A2A |
| Agent tools & event triggers | Experimental | Evaluate โ LlmClient/ConversationMemory/AgentTool extension points, connector-backed tools and SPI plugin deployment landed in #5408/#5409; runtime in eventmesh-agent-runtime, plugins in eventmesh-agent-plugin/ | Agent tool ecosystem |
| TCP / gRPC / OpenMessaging SDKs | Legacy-compatible | Existing users only โ kept so old clients run unmodified; not extended | HTTP + CloudEvents |
Status meanings:
Migrating off TCP / gRPC SDKs? The legacy clients keep working against the current runtime; see the client guide for the HTTP + CloudEvents replacement (
CloudEventsClient). The legacy gRPC SDK surface is served again since the #5411 bridge (opt-in viaeventmesh.grpc.port=10205) โ oldEventMeshGrpcProducer/EventMeshGrpcConsumerclients run unmodified on the v2 runtime.
The docs tree is organized by audience โ start from the documentation map:
A full step-by-step walkthrough โ prerequisites, backend choice, run via Docker or from source, first publish, three receive transports, unsubscribe, and the SDK path โ lives in Getting started. The first-event examples in that guide work against the standard ports (10105 HTTP, 10106 admin, 10107 WebSocket opt-in).
Each contributor has played an important role in promoting the robust development of Apache EventMesh. We sincerely appreciate all contributors who have contributed code and documents.
Apache EventMesh enriches the CNCF Cloud Native Landscape.
Apache EventMesh is licensed under the Apache License, Version 2.0.
| WeChat Assistant | WeChat Public Account | Slack |
|---|---|---|
| Join Slack Chat(Please open an issue if this link is expired) |
Bi-weekly meeting : #Tencent meeting : 346-6926-0133
Bi-weekly meeting record : bilibili
| Name | Description | Subscribe | Unsubscribe | Archive |
|---|---|---|---|---|
| Users | User discussion | Subscribe | Unsubscribe | Mail Archives |
| Development | Development discussion (Design Documents, Issues, etc.) | Subscribe | Unsubscribe | Mail Archives |
| Commits | Commits to related repositories | Subscribe | Unsubscribe | Mail Archives |
| Issues | Issues or PRs comments and reviews | Subscribe | Unsubscribe | Mail Archives |