This is an automated email from the ASF dual-hosted git repository.

qqeasonchen pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/eventmesh.git


The following commit(s) were added to refs/heads/develop by this push:
     new e526c760d docs: refine README & redesign architecture diagram
e526c760d is described below

commit e526c760de2b57e408b7e1bf612572b7bb31104b
Author: qqeasonchen <[email protected]>
AuthorDate: Mon Jul 13 19:00:12 2026 +0800

    docs: refine README & redesign architecture diagram
---
 README.md                              | 164 ++++++++++++++++++++++-----------
 README.zh-CN.md                        | 143 ++++++++++++++++++++++++----
 resources/eventmesh-architecture-7.png | Bin 0 -> 94211 bytes
 3 files changed, 235 insertions(+), 72 deletions(-)

diff --git a/README.md b/README.md
index a82a7479f..e6207c504 100644
--- a/README.md
+++ b/README.md
@@ -27,27 +27,33 @@
 
 ### EventMesh Architecture
 
-![EventMesh Architecture](resources/eventmesh-architecture-6.png)
+![EventMesh Architecture](resources/eventmesh-architecture-7.png)
+
+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  [...]
 
 ## Features
 
-Apache EventMesh has a vast amount of features to help users achieve their 
goals. Let us share with you some of the key features EventMesh has to offer:
+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**
 
-- Built around the [CloudEvents](https://cloudevents.io) specification.
-- Rapidty extendsible interconnector layer 
[connectors](https://github.com/apache/eventmesh/tree/master/eventmesh-connectors)
 using 
[openConnect](https://github.com/apache/eventmesh/tree/master/eventmesh-openconnect)
 such as the source or sink of Saas, CloudService, and Database etc.
-- Rapidty extendsible storage layer such as [Apache 
RocketMQ](https://rocketmq.apache.org), [Apache 
Kafka](https://kafka.apache.org), [Apache Pulsar](https://pulsar.apache.org), 
[RabbitMQ](https://rabbitmq.com), [Redis](https://redis.io).
-- Rapidty extendsible meta such as [Consul](https://consulproject.org/en/), 
[Nacos](https://nacos.io), [ETCD](https://etcd.io) and 
[Zookeeper](https://zookeeper.apache.org/).
-- Guaranteed at-least-once delivery.
-- Deliver events between multiple EventMesh deployments.
-- Event schema management by catalog service.
-- Powerful event orchestration by [Serverless 
workflow](https://serverlessworkflow.io/) engine.
-- Powerful event filtering and transformation.
-- Rapid, seamless scalability.
-- Easy Function develop and framework integration.
+- **CloudEvents-native, end to end** — built entirely around the 
[CloudEvents](https://cloudevents.io) 1.0 specification, so events stay 
vendor-neutral and portable.
+- **Lightweight, language-agnostic SDK** — just three operations over plain 
HTTP (`publish`, `subscribe`, `unsubscribe`); no heavyweight client, no vendor 
lock-in.
+- **Runtime-owned subscription & dispatch** — subscription state and delivery 
semantics (load-balance / broadcast / multicast) are managed by EventMesh 
itself, not the underlying MQ, giving you consistent behavior across any 
storage backend.
+- **MQ as a pure write-ahead log (WAL)** — append-only, no consumer groups, no 
tags; the broker is reduced to durable storage, dramatically simplifying 
operations.
+- **Guaranteed at-least-once delivery** — EventMesh owns reliability through 
self-managed offsets and explicit ACK.
+- **Multiple delivery transports** — subscribers choose HTTP long-polling, 
Server-Sent Events (SSE), or WebSocket push, with request-reply support.
+- **Effortless horizontal scaling** — stateless Runtime instances scale out 
seamlessly with no rebalancing cost.
 
-## Roadmap
+**Extensibility & ecosystem**
 
-Please go to the [roadmap](https://eventmesh.apache.org/docs/roadmap) to get 
the release history and new features of Apache EventMesh.
+- **Agent-to-Agent (A2A) collaboration** — a built-in [A2A 
protocol](docs/a2a-protocol/README_EN.md) turns EventMesh into an agent 
collaboration bus, bridging synchronous MCP / JSON-RPC 2.0 tool calls and 
asynchronous event-driven pub/sub for LLM and multi-agent systems.
+- **Pluggable storage layer** — [Apache 
RocketMQ](https://rocketmq.apache.org), [Apache 
Kafka](https://kafka.apache.org), [Apache Pulsar](https://pulsar.apache.org), 
[RabbitMQ](https://rabbitmq.com), [Redis](https://redis.io), and more.
+- **Pluggable interconnector layer** — 
[connectors](https://github.com/apache/eventmesh/tree/master/eventmesh-connectors)
 run as standalone processes acting as the source or sink of SaaS, 
CloudService, Database, etc.
+- **Pluggable meta service** — [Consul](https://consulproject.org/en/), 
[Nacos](https://nacos.io), [ETCD](https://etcd.io), and 
[Zookeeper](https://zookeeper.apache.org/).
+- **Event schema management** via catalog service.
+- **Powerful event orchestration** through the [Serverless 
workflow](https://serverlessworkflow.io/) engine.
+- **Powerful event filtering and transformation.**
 
 ## Subprojects
 
@@ -76,60 +82,106 @@ sudo docker pull apache/eventmesh:latest
 Use the following command to start the EventMesh container:
 
 ```shell
-sudo docker run -d --name eventmesh -p 10000:10000 -p 10105:10105 -p 
10205:10205 -p 10106:10106 -t apache/eventmesh:latest
+sudo docker run -d --name eventmesh -p 8080:8080 -p 8081:8081 -p 8082:8082 -t 
apache/eventmesh:latest
 ```
-#### 3. Creating Topics
-Creating a topic is the first step in using EventMesh. You need to send an 
HTTP POST request to create a topic.
-Example Request
+
+> Ports: `8080` = traffic HTTP (`/events/*` CloudEvents API), `8081` = admin 
HTTP (`/admin/*`), `8082` = WebSocket push (opt-in). The connector runtime 
image exposes `8083` for its optional admin port.
+#### 3. Publishing a CloudEvent
+
+Applications talk to EventMesh over the `/events/*` HTTP endpoints using 
standard [CloudEvents](https://cloudevents.io) 1.0. Publish an event with an 
HTTP POST (`202 Accepted` means the event was written to the WAL):
+
 ```shell
-POST /eventmesh/topic/create HTTP/1.1  
-Host: localhost:10105  
-Content-Type: application/json  
-  
-{  
-  "topic": "example-topic"  
+POST /events/publish HTTP/1.1
+Host: localhost:8080
+Content-Type: application/cloudevents+json
+
+{
+  "specversion": "1.0",
+  "id": "89010a5a-3c6f-4a1e-9b2d-0f7c1f2e3a4b",
+  "source": "/example/producer",
+  "type": "com.example.order.created",
+  "subject": "orders",
+  "datacontenttype": "application/json",
+  "data": {
+    "content": "Hello, EventMesh!"
+  }
 }
 ```
-#### 4. Subscribing to Topics
-After creating a topic, you can subscribe to it to receive messages. EventMesh 
provides two subscription methods: local subscription and remote subscription.
+
+#### 4. Subscribing to a Topic
+
+Subscriptions are registered with EventMesh (there are no consumer groups or 
tags). Provide a `clientId`, the topic, and a distribution `mode` 
(`LOAD_BALANCE`, `BROADCAST`, `MULTICAST`, or `LOAD_BALANCE_STICKY`). The 
response returns a `subscriptionId`:
 
 ```shell
-POST /eventmesh/subscribe/local HTTP/1.1  
-Host: localhost:10105  
-Content-Type: application/json  
-{  
-  "url": "http://localhost:8080/callback";,  
-  "consumerGroup": "example-consumer-group",  
-  "topic": [  
-    {  
-      "topic": "example-topic",  
-      "mode": "CLUSTERING",  
-      "type": "SYNC"  
-    }  
-  ]  
+POST /events/subscribe HTTP/1.1
+Host: localhost:8080
+Content-Type: application/json
+
+{
+  "clientId": "order-svc",
+  "topic": "orders",
+  "mode": "LOAD_BALANCE"
 }
 ```
-#### 5. Sending Messages
-EventMesh provides multiple message sending methods, including asynchronous 
sending, synchronous sending, and batch sending.
+
+#### 5. Receiving Events
+
+Subscribers can receive dispatched events through three transports. Pick 
whichever fits your workload — all of them deliver the same CloudEvents and 
honor EventMesh's ACK / at-least-once semantics.
+
+**a) HTTP Long-Polling** — pull events; the request blocks until events arrive 
or the timeout elapses:
+
 ```shell
-POST /eventmesh/publish HTTP/1.1  
-Host: localhost:10105  
-Content-Type: application/json    
-eventmesh-message-topic: example-topic 
-{  
-  "content": "Hello, EventMesh!"  
+GET /events/poll?clientId=order-svc&topics=orders&timeout=30000 HTTP/1.1
+Host: localhost:8080
+```
+
+After processing the delivered events, acknowledge them so the offset advances 
(at-least-once delivery):
+
+```shell
+POST /events/ack HTTP/1.1
+Host: localhost:8080
+Content-Type: application/json
+
+{
+  "subId": "sub-123",
+  "clientId": "order-svc",
+  "topic": "orders",
+  "partition": 0,
+  "offset": 42
 }
 ```
+
+**b) Server-Sent Events (SSE)** — server push over a long-lived HTTP 
connection; the client does not poll:
+
+```shell
+GET /events/stream?clientId=order-svc&topics=orders HTTP/1.1
+Host: localhost:8080
+Accept: text/event-stream
+```
+
+**c) WebSocket** — full-duplex server push over a dedicated WebSocket port:
+
+```shell
+GET /events/stream HTTP/1.1
+Host: localhost:8082
+Upgrade: websocket
+Connection: Upgrade
+```
+
+> Long-polling, SSE, and WebSocket are interchangeable delivery transports — a 
subscriber chooses one. SSE and WebSocket are pushed by the server (no polling 
loop), while long-polling is client-driven. Request-reply (`POST 
/events/request` + `POST /events/reply`) is also supported. The 
`CloudEventsClient` Java SDK wraps all of these (`subscribe` / `subscribeSse` / 
`subscribeWs`); see the [CloudEvents client 
guide](docs/eventmesh-cloudevents-client-guide.md).
+
 #### 6. Unsubscribing
-When you no longer need to receive messages for a topic, you can unsubscribe.
+
+When you no longer need to receive events for a topic, unsubscribe by 
`clientId` (optionally with the `subscriptionId`):
+
 ```shell
-POST /eventmesh/unsubscribe/local HTTP/1.1  
-Host: localhost:10105  
-Content-Type: application/json  
-{  
-  "url": "http://localhost:8080/callback";,  
-  "consumerGroup": "example-consumer-group",  
-  "topics": ["example-topic"]  
+POST /events/unsubscribe HTTP/1.1
+Host: localhost:8080
+Content-Type: application/json
+
+{
+  "clientId": "order-svc",
+  "topic": "orders"
 }
 ```
 ## Contributing
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 9aebab3bf..700eee8d1 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -27,28 +27,34 @@
 
 ### EventMesh 架构
 
-![EventMesh Architecture](resources/eventmesh-architecture-6.png)
+![EventMesh Architecture](resources/eventmesh-architecture-7.png)
+
+EventMesh 采用统一的 **CloudEvents-over-MQ** 
架构。消息队列(MQ)仅作为持久化的预写日志(WAL)存储层——没有消费者组(consumer group)、没有 Tag,也不承担 Broker 
端的订阅语义。所有投递逻辑由无状态的 EventMesh Runtime 掌控:其中的 **SubscriptionManager** 
负责维护订阅注册表与位点(offset)跟踪,并以负载均衡(load-balance)、广播(broadcast)、多播(multicast)等语义分发事件。应用通过轻量的
 **HTTP + CloudEvents 1.0** SDK(`publish` / `subscribe` / 
`unsubscribe`)接入,与外部系统的集成则通过 connector SPI 在独立进程的 Connector Runtime 中运行。
 
 
 ## 特性
 
-Apache EventMesh提供了许多功能来帮助用户实现他们的目标,以下是一些EventMesh的关键特点:
+Apache EventMesh 提供了丰富的能力,帮助用户轻松构建事件驱动应用。以下是让 EventMesh 与众不同的核心亮点:
+
+**核心架构**
 
-- 基于 [CloudEvents](https://cloudevents.io) 规范构建。
-- 
快速可扩展的Connector,[connectors](https://github.com/apache/eventmesh/tree/master/eventmesh-connectors),例如作为Saas、CloudService和数据库等的source
 或sink。.
-- 快速可扩展的存储层,使用 
[JDBC](https://en.wikipedia.org/wiki/Java_Database_Connectivity)和[Apache 
RocketMQ](https://rocketmq.apache.org), [Apache 
Kafka](https://kafka.apache.org), [Apache Pulsar](https://pulsar.apache.org), 
[RabbitMQ](https://rabbitmq.com), [Redis](https://redis.io), 
[Pravega](https://cncf.pravega.io), 和 
[RDMS](https://en.wikipedia.org/wiki/Relational_database)(正在进行中)集成。
-- 快速可扩展的控制器,例如 [Consul](https://consulproject.org/en/), 
[Nacos](https://nacos.io), [ETCD](https://etcd.io) 和 
[Zookeeper](https://zookeeper.apache.org/)。
-- 至少一次的可靠性投递。
-- 在多个EventMesh部署之间传递事件。
-- 通过目录服务进行事件模式管理。
-- 通过 [Serverless workflow](https://serverlessworkflow.io/) 引擎实现强大的事件编排。
-- 强大的事件过滤和转换功能。
-- 快速、无缝的可扩展性。
-- 易于函数开发和框架集成。
+- **全链路 CloudEvents 原生** —— 完全基于 [CloudEvents](https://cloudevents.io) 1.0 
规范构建,事件天然厂商中立、可移植。
+- **轻量、语言无关的 SDK** —— 纯 HTTP 上仅需 `publish`、`subscribe`、`unsubscribe` 
三个操作,无重客户端、无厂商锁定。
+- **订阅与分发由 Runtime 掌控** —— 订阅状态与投递语义(负载均衡 / 广播 / 多播)由 EventMesh 自主管理,而非底层 
MQ,无论后端是哪种存储,行为都保持一致。
+- **MQ 仅作纯预写日志(WAL)** —— 仅追加写入,无消费者组、无 Tag;Broker 退化为纯持久化存储,大幅简化运维。
+- **保证至少一次(at-least-once)投递** —— 可靠性由 EventMesh 通过自管 offset + 显式 ACK 掌控。
+- **多种下发通道** —— 订阅者可自由选择 HTTP 长轮询、Server-Sent Events(SSE)或 WebSocket 
推送,并支持请求-应答(request-reply)。
+- **轻松水平扩展** —— 无状态 Runtime 实例可无缝扩容,无重平衡成本。
 
-## 路线图
+**扩展性与生态**
 
-请前往[路线图](https://eventmesh.apache.org/docs/roadmap)查看Apache 
EventMesh的版本历史和新功能。.
+- **智能体协作(A2A)** —— 内置的 [A2A 协议](docs/a2a-protocol/README.md) 将 EventMesh 
打造成智能体协作总线,打通同步的 MCP / JSON-RPC 2.0 
工具调用与异步的事件驱动发布订阅,原生支撑大模型(LLM)与多智能体(Multi-Agent)场景。
+- **可插拔存储层** —— [Apache RocketMQ](https://rocketmq.apache.org)、[Apache 
Kafka](https://kafka.apache.org)、[Apache 
Pulsar](https://pulsar.apache.org)、[RabbitMQ](https://rabbitmq.com)、[Redis](https://redis.io)
 等。
+- **可插拔互联层(Connector)** —— 
[connectors](https://github.com/apache/eventmesh/tree/master/eventmesh-connectors)
 作为独立进程运行,可充当 SaaS、CloudService、数据库等的 source 或 sink。
+- **可插拔元数据服务** —— 
[Consul](https://consulproject.org/en/)、[Nacos](https://nacos.io)、[ETCD](https://etcd.io)
 和 [Zookeeper](https://zookeeper.apache.org/)。
+- **事件模式管理** —— 通过目录(catalog)服务实现。
+- **强大的事件编排** —— 基于 [Serverless workflow](https://serverlessworkflow.io/) 引擎。
+- **强大的事件过滤与转换能力。**
 
 ## 子项目
 
@@ -119,9 +125,11 @@ sudo docker pull apache/eventmesh:latest
 使用以下命令启动 EventMesh 容器:
 
 ```shell
-sudo docker run -d --name eventmesh -p 10000:10000 -p 10105:10105 -p 
10205:10205 -p 10106:10106 -t apache/eventmesh:latest
+sudo docker run -d --name eventmesh -p 8080:8080 -p 8081:8081 -p 8082:8082 -t 
apache/eventmesh:latest
 ```
 
+> 端口说明:`8080` = 流量 HTTP(`/events/*` CloudEvents API),`8081` = 管理 
HTTP(`/admin/*`),`8082` = WebSocket 推送(按需开启)。Connector 运行时镜像另暴露 `8083` 
作为其可选的管理端口。
+
 进入容器:
 
 ```shell
@@ -174,6 +182,109 @@ eventmesh-operator-59c59f4f7b-nmmlm   1/1     Running   0 
         3m12s
 eventmesh-runtime-0-a-0               1/1     Running   0          15s
 ```
 
+### 使用 EventMesh API
+
+应用通过 `/events/*` HTTP 端点以标准 [CloudEvents](https://cloudevents.io) 1.0 与 
EventMesh 交互,仅需 `publish` / `subscribe` / `unsubscribe` 等操作。订阅与分发由 EventMesh 
自主管理,无需消费者组或 Tag。
+
+#### 1. 发布 CloudEvent
+
+以 CloudEvents 1.0 格式通过 HTTP POST 发布事件(返回 `202 Accepted` 表示事件已写入 WAL):
+
+```shell
+POST /events/publish HTTP/1.1
+Host: localhost:8080
+Content-Type: application/cloudevents+json
+
+{
+  "specversion": "1.0",
+  "id": "89010a5a-3c6f-4a1e-9b2d-0f7c1f2e3a4b",
+  "source": "/example/producer",
+  "type": "com.example.order.created",
+  "subject": "orders",
+  "datacontenttype": "application/json",
+  "data": {
+    "content": "Hello, EventMesh!"
+  }
+}
+```
+
+#### 2. 订阅 Topic
+
+向 EventMesh 注册订阅(无消费者组、无 Tag)。提供 `clientId`、`topic` 以及分发模式 
`mode`(`LOAD_BALANCE`、`BROADCAST`、`MULTICAST` 或 `LOAD_BALANCE_STICKY`),响应返回 
`subscriptionId`:
+
+```shell
+POST /events/subscribe HTTP/1.1
+Host: localhost:8080
+Content-Type: application/json
+
+{
+  "clientId": "order-svc",
+  "topic": "orders",
+  "mode": "LOAD_BALANCE"
+}
+```
+
+#### 3. 接收事件
+
+订阅者可通过三种传输方式接收下发的事件,按业务场景任选其一——它们下发相同的 CloudEvents,并遵循 EventMesh 的 ACK / 
至少一次语义。
+
+**a) HTTP 长轮询** —— 主动拉取,请求会阻塞直到有事件或超时:
+
+```shell
+GET /events/poll?clientId=order-svc&topics=orders&timeout=30000 HTTP/1.1
+Host: localhost:8080
+```
+
+处理完事件后,进行 ACK 以推进 offset(至少一次投递):
+
+```shell
+POST /events/ack HTTP/1.1
+Host: localhost:8080
+Content-Type: application/json
+
+{
+  "subId": "sub-123",
+  "clientId": "order-svc",
+  "topic": "orders",
+  "partition": 0,
+  "offset": 42
+}
+```
+
+**b) Server-Sent Events(SSE)** —— 服务端经长连接主动推送,客户端无需轮询:
+
+```shell
+GET /events/stream?clientId=order-svc&topics=orders HTTP/1.1
+Host: localhost:8080
+Accept: text/event-stream
+```
+
+**c) WebSocket** —— 经独立 WebSocket 端口的全双工服务端推送:
+
+```shell
+GET /events/stream HTTP/1.1
+Host: localhost:8082
+Upgrade: websocket
+Connection: Upgrade
+```
+
+> 长轮询、SSE、WebSocket 是可互换的下发传输——订阅者任选其一。SSE 与 WebSocket 
由服务端推送(无需轮询循环),长轮询则由客户端驱动。此外还支持请求-应答(`POST /events/request` + `POST 
/events/reply`)。`CloudEventsClient` Java SDK 封装了以上全部方式(`subscribe` / 
`subscribeSse` / `subscribeWs`),用法见[CloudEvents 
客户端使用指引](docs/eventmesh-cloudevents-client-guide.md)。
+
+#### 4. 取消订阅
+
+当不再需要接收某 Topic 的事件时,按 `clientId` 取消订阅(可选带 `subscriptionId`):
+
+```shell
+POST /events/unsubscribe HTTP/1.1
+Host: localhost:8080
+Content-Type: application/json
+
+{
+  "clientId": "order-svc",
+  "topic": "orders"
+}
+```
+
 ## 贡献
 
 每个贡献者在推动 Apache EventMesh 的健康发展中都发挥了重要作用。我们真诚感谢所有为代码和文档作出贡献的贡献者。
diff --git a/resources/eventmesh-architecture-7.png 
b/resources/eventmesh-architecture-7.png
new file mode 100644
index 000000000..2770ea563
Binary files /dev/null and b/resources/eventmesh-architecture-7.png differ


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to