Merge pull request #1138 from xwm1992/license-update
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index ddf705c..1bc7ac8 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -20,10 +20,10 @@
-->
<!--
-(If this PR fixes a GitHub issue, please add `Fixes ISSUE #<XXX>`.)
+(If this PR fixes a GitHub issue, please add `Fixes #<XXX>` or `Cloese #<XXX>`.)
-->
-Fixes ISSUE #<XXXX>.
+Fixes #<XXXX>.
### Motivation
diff --git a/docs/en/instruction/01-store-with-docker.md b/docs/en/instruction/01-store-with-docker.md
index 8252908..e772db6 100644
--- a/docs/en/instruction/01-store-with-docker.md
+++ b/docs/en/instruction/01-store-with-docker.md
@@ -55,7 +55,7 @@
```shell
#运行namerv容器
-sudo docker run -d -p 9876:9876 -v `pwd` /data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv rocketmqinc/rocketmq-namesrv:4.5.0-alpine sh mqnamesrv
+sudo docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv rocketmqinc/rocketmq-namesrv:4.5.0-alpine sh mqnamesrv
#运行broker容器
sudo docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" rocketmqinc/rocketmq-broker:4.5.0-alpine sh mqbroker -c ../conf/broker.conf
diff --git a/docs/en/roadmap.md b/docs/en/roadmap.md
index e890da3..f3c58aa 100644
--- a/docs/en/roadmap.md
+++ b/docs/en/roadmap.md
@@ -8,20 +8,40 @@
## List of Features and Milestones
-| Status | Description | Reference |
-| --- | --- | --- |
-| **Implemented** | gRPC Integration | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
-| **In Progress** | Event Governance for Choreography | [GitHub Issue](https://github.com/apache/incubator-eventmesh/blob/master/docs/en/features/eventmesh-workflow-design.md) |
-| Planned | Knative Eventing Infrastructure | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/790), [GSoC '22](https://issues.apache.org/jira/browse/COMDEV-463) |
-| Planned | Dashboard | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/700), [GSoC '22](https://issues.apache.org/jira/browse/COMDEV-465) |
-| Planned | Event Streaming | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/676) |
-| Planned | Federated Connector | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/577) |
-| Planned | Transaction Event | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/697) |
-| Planned | Event Query Language (EQL)| [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/778) |
-| Planned | Metadata consistency persistent| [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/817) |
-| Planned | Go SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/762) |
-| Planned | Rust SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/815) |
-| Planned | WebAssembly Runtime| [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/576) |
-| Planned | Filter Chain | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/664) |
-| Planned | Kafka-based EventStore| [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/199) |
-| Planned | Redis-based EventStore| [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/389) |
+| Status | Description | Reference |
+|-------------------------------------------|---------------------------------| --- |
+| **Implemented in 1.0.0** | Support HTTP | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.0.0** | Support TCP | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.0.0** | Support Pub/Sub Event | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.1.1** | Provide Java SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.1.1** | Support HTTPS | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.2.0** | Support RocketMQ as EventStore | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.2.0** | Support Heartbeat | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.3.0** | Integrate with OpenSchema | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.3.0** | Integrate with OpenTelemetry | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.3.0** | Support CloudEvents | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.4.0** | Support gRPC | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.5.0** | Provide Golang SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.5.0** | Support Nacos Registry | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.5.0** | Support Mesh Bridge | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.5.0** | Support Federal Government | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.6.0 (to be released)** | Integrate with Consul | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.6.0 (to be released)** | Support Webhook | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.6.0 (to be released)** | Support etcd | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **In Progress** | Knative Eventing Infrastructure | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/790), [GSoC '22](https://issues.apache.org/jira/browse/COMDEV-463) |
+| **In Progress** | Dashboard | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/700), [GSoC '22](https://issues.apache.org/jira/browse/COMDEV-465) |
+| **In Progress** | Support Kafka as EventStore | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/676) |
+| **In Progress** | Support Pulsar as EventStore | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/676) |
+| **In Progress** | Support Dledger | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **In Progress** | Workflow | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **In Progress** | Support Redis | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **In Progress** | Support Mesh Bridge | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **In Progress** | Support Zookeeper | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| Planned | Provide NodeJS SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| Planned | Transaction Event | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/697) |
+| Planned | Event Query Language (EQL) | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/778) |
+| Planned | Metadata consistency persistent | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/817) |
+| Planned | Rust SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/815) |
+| Planned | WebAssembly Runtime | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/576) |
+| Planned | Filter Chain | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/664) |
+
diff --git a/docs/zh/desing-document/01-workflow.md b/docs/zh/desing-document/01-workflow.md
new file mode 100644
index 0000000..444c094
--- /dev/null
+++ b/docs/zh/desing-document/01-workflow.md
@@ -0,0 +1,258 @@
+# EventMesh工作流
+
+## 业务场景
+
+图中你正在构建一个简单的电商订单管理系统,系统能够接收和调配新的订单,调配流程需要处理所有的订单创建,付款处理以及发货处理。
+
+为了实现高可用和高性能,你可以使用事件驱动架构(EDA)构建微服务应用去处理商店前端,订单管理,支付处理和发货管理。你可以在云上部署整个系统。要处理高并发,你可以利用消息系统缓冲,并扩展多个微服务实例。架构类似于:
+
+![Workflow Use Case](../../images/design-document/workflow-use-case.jpg)
+
+当每个微服务都在自己的事件通道上运行时,EventMesh在执行事件编排方面发挥着至关重要的作用。
+
+我们使用 [CNCF Serverless工作流](https://serverlessworkflow.io/) 来描述此事件工作流编排。
+
+## CNCF Serverless工作流
+
+CNCF Serverless工作流定义了一个厂商中立、开源和完全社区驱动的生态系统,用于定义和运行针对Serverless技术领域的基于DSL的工作流。
+
+Serverless工作流定义了一种领域特定语言(DSL)来描述有状态和无状态的基于工作流的serverless函数和微服务编排。
+
+详见[官方github](https://github.com/serverlessworkflow/specification)
+
+## EventMesh工作流
+
+我们利用Serverless工作流DSL来描述EventMesh工作流。根据其规范,工作流由一系列用于描述控制流逻辑的工作流状态组成。目前,我们仅支持与事件相关的工作流状态。请参见[工作流DSL设计](#workflow-dsl-design-wip)中支持的状态。
+
+`工作流状态`可以包含通用的`操作`,或在工作流执行期间应调用的服务/函数。这些`操作`可以引用可复用的`函数`定义(应如何调用这些函数/服务),还可以引用触发基于事件的服务调用的事件,以及要等待的事件,这些事件表示这种基于事件的服务调用完成。
+
+在EDA解决方案中,我们通常使用AsyncAPI定义事件驱动的微服务。Serverless工作流“函数”定义支持使用AsyncAPI定义调用语义。有关详细信息,请参见[Using Funtions for AsyncAPI Service](https://github.com/serverlessworkflow/specification/blob/main/specification.md#using-functions-for-async-api-service-invocations)。
+
+### AsyncAPI
+
+AsyncAPI是一项开源计划,旨在改善事件驱动体系结构(EDA)的当前状态。我们的长期目标是让使用EDA和使用REST API一样容易。包括从文档到代码生成、发现到事件管理。现在应用于REST API的大多数流程也适用于事件驱动/异步API。
+
+详见[AsyncAPI官网](https://www.asyncapi.com/docs/getting-started)
+
+### 工作流示例
+
+在本示例中,我们构建了上面订单管理系统的事件驱动工作流。
+
+首先,我们需要为我们的微服务应用定义AsyncAPI。
+
+- 在线商店应用程序
+
+```yaml
+asyncapi: 2.2.0
+info:
+ title: Online Store application
+ version: '0.1.0'
+channels:
+ store/order:
+ subscribe:
+ operationId: newStoreOrder
+ message:
+ $ref : '#/components/NewOrder'
+
+```
+
+- 订单服务
+
+```yaml
+asyncapi: 2.2.0
+info:
+ title: Order Service
+ version: '0.1.0'
+channels:
+ order/inbound:
+ publish:
+ operationId: sendOrder
+ message:
+ $ref : '#/components/Order'
+ order/outbound:
+ subscribe:
+ operationId: processedOrder
+ message:
+ $ref : '#/components/Order'
+```
+
+- 支付服务
+
+```yaml
+asyncapi: 2.2.0
+info:
+ title: Payment Service
+ version: '0.1.0'
+channels:
+ payment/inbound:
+ publish:
+ operationId: sendPayment
+ message:
+ $ref : '#/components/OrderPayment'
+ payment/outbound:
+ subscribe:
+ operationId: paymentReceipt
+ message:
+ $ref : '#/components/OrderPayment'
+```
+
+- 物流服务
+
+```yaml
+asyncapi: 2.2.0
+info:
+ title: Shipment Service
+ version: '0.1.0'
+channels:
+ shipment/inbound:
+ publish:
+ operationId: sendShipment
+ message:
+ $ref : '#/components/OrderShipment'
+```
+
+接下来,定义描述订单管理业务逻辑的订单工作流。
+
+```yaml
+id: storeorderworkflow
+version: '1.0'
+specVersion: '0.8'
+name: Store Order Management Workflow
+states:
+ - name: Receive New Order Event
+ type: event
+ onEvents:
+ - eventRefs:
+ - NewOrderEvent
+ actions:
+ - eventRef:
+ triggerEventRef: OrderServiceSendEvent
+ resultEventRef: OrderServiceResultEvent
+ - eventRef:
+ triggerEventRef: PaymentServiceSendEvent
+ resultEventRef: PaymentServiceResultEvent
+ transition: Check Payment Status
+ - name: Check Payment Status
+ type: switch
+ dataConditions:
+ - name: Payment Successfull
+ condition: "${ .payment.status == 'success' }"
+ transition: Send Order Shipment
+ - name: Payment Denied
+ condition: "${ .payment.status == 'denied' }"
+ end: true
+ defaultCondition:
+ end: true
+ - name: Send Order Shipment
+ type: operation
+ actions:
+ - eventRef:
+ triggerEventRef: ShipmentServiceSendEvent
+ end: true
+events:
+ - name: NewOrderEvent
+ source: file://onlineStoreApp.yaml#newStoreOrder
+ type: asyncapi
+ kind: consumed
+ - name: OrderServiceSendEvent
+ source: file://orderService.yaml#sendOrder
+ type: asyncapi
+ kind: produced
+ - name: OrderServiceResultEvent
+ source: file://orderService.yaml#processedOrder
+ type: asyncapi
+ kind: consumed
+ - name: PaymentServiceSendEvent
+ source: file://paymentService.yaml#sendPayment
+ type: asyncapi
+ kind: produced
+ - name: PaymentServiceResultEvent
+ source: file://paymentService.yaml#paymentReceipt
+ type: asyncapi
+ kind: consumed
+ - name: ShipmentServiceSendEvent
+ source: file://shipmentService.yaml#sendShipment
+ type: asyncapi
+ kind: produced
+```
+
+对应的工作流图如下:
+
+![Workflow Diagram](../../images/design-document/workflow-diagram.png)
+
+## EventMesh工作流引擎
+
+在下面的体系结构图中, EventMesh目录, EventMesh工作流引擎 和 EventMesh Runtime在三个不同的处理器中运行。
+
+![Workflow Architecture](../../images/design-document/workflow-architecture.jpg)
+
+运行工作流的步骤如下:
+
+1. 在环境中部署发布者和订阅者应用程序。
+ 使用AsyncAPI描述应用程序API,生成asyncAPI yaml。
+ 使用AsyncAPI在EventMesh目录中注册发布者和订阅者应用程序。
+
+2. 在EventMesh工作流引擎中注册Serverless工作流DSL。
+
+3. 工作流引擎从EventMesh目录查询发布服务器和订阅服务器的需要的工作流DSL`函数`。
+
+4. 事件驱动App将事件发布到EventMesh Runtime触发工作流。EventMesh工作流引擎发布和订阅事件、编排事件。
+
+### EventMesh Catalog 设计
+
+EventMesh目录存储发布者、订阅者和通道元数据。由以下模块组成:
+
+- AsyncAPI解析器
+
+ 使用AsyncAPI社区提供的SDK ([tool list](https://www.asyncapi.com/docs/community/tooling)),
+ 解析并验证AsyncAPI yaml输入,并生成AsyncAPI定义。
+
+- 发布者, 通道, 订阅者模块
+
+ 从AsyncAPI定义存储发布者、订阅者和通道信息。
+
+### EventMesh工作流引擎设计
+
+工作流引擎由以下模块组成:
+
+- 工作流解析器
+
+ 使用Serverless Workflow社区提供的SDK([SDKs](https://github.com/serverlessworkflow/specification#sdks)),
+ 解析和验证工作流DSL输入,并生成工作流定义。
+
+- 工作流模块
+
+ 管理工作流实例的生命周期,从创建、启动、停止到销毁。
+
+- 状态模块
+
+ 管理工作流状态生命周期。支持与事件相关的状态,and the supported state list below is Work-in-Progress.
+
+ | 工作流状态 | 描述 |
+ | --- | --- |
+ | Operation | 执行Actions中定义的AsyncAPI函数 |
+ | Event | 检查定义的事件是否匹配,如果匹配,执行定义的AsyncAPI函数 |
+ | Switch | 检查事件是否与事件条件匹配,并执行定义的AsyncAPI函数 |
+ | Parallel | 并行执行定义的AsyncAPI函数 |
+ | ForEach | 迭代输入集合并执行定义的AsyncAPI函数 |
+
+- 行为模块
+
+ 管理函数中的行为。
+
+- 函数模块
+
+ 通过在EventMesh Runtime中创建发布者和/或订阅者来管理AsyncAPI函数,并管理发布者/订阅者生命周期。
+
+ | AsyncAPI 操作 | EventMesh Runtime |
+ | --- | --- |
+ | Publish | Publisher |
+ | Subscribe | Subscriber |
+
+- 事件模块
+
+ 使用工作流DSL中定义的规则管理CloudEvent数据模型,包括事件过滤器、关联和转换。
+
+- 重试模块
+
+ 管理事件发布到EventMesh Runtime的重试逻辑。
diff --git a/docs/zh/instruction/01-store-with-docker.md b/docs/zh/instruction/01-store-with-docker.md
index 6b4dbb7..cd3fc1a 100644
--- a/docs/zh/instruction/01-store-with-docker.md
+++ b/docs/zh/instruction/01-store-with-docker.md
@@ -24,7 +24,7 @@
```shell
#运行 namerv 容器
-sudo docker run -d -p 9876:9876 -v `pwd` /data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv rocketmqinc/rocketmq-namesrv:4.5.0-alpine sh mqnamesrv
+sudo docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv rocketmqinc/rocketmq-namesrv:4.5.0-alpine sh mqnamesrv
#运行 broker 容器
sudo docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" rocketmqinc/rocketmq-broker:4.5.0-alpine sh mqbroker -c ../conf/broker.conf
diff --git a/docs/zh/roadmap.md b/docs/zh/roadmap.md
index d48a08d..a3d7695 100644
--- a/docs/zh/roadmap.md
+++ b/docs/zh/roadmap.md
@@ -8,20 +8,40 @@
## List of Features and Milestones
-| Status | Description | Reference |
-| --- | --- | --- |
-| **Implemented** | gRPC Integration | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
-| **In Progress** | Event Governance for Choreography | [GitHub Issue](https://github.com/apache/incubator-eventmesh/blob/master/docs/en/features/eventmesh-workflow-design.md) |
-| Planned | Knative Eventing Infrastructure | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/790), [GSoC '22](https://issues.apache.org/jira/browse/COMDEV-463) |
-| Planned | Dashboard | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/700), [GSoC '22](https://issues.apache.org/jira/browse/COMDEV-465) |
-| Planned | Event Streaming | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/676) |
-| Planned | Federated Connector | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/577) |
-| Planned | Transaction Event | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/697) |
-| Planned | Event Query Language (EQL)| [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/778) |
-| Planned | Metadata consistency persistent| [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/817) |
-| Planned | Go SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/762) |
-| Planned | Rust SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/815) |
-| Planned | WebAssembly Runtime| [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/576) |
-| Planned | Filter Chain | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/664) |
-| Planned | Kafka-based EventStore| [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/199) |
-| Planned | Redis-based EventStore| [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/389) |
+| Status | Description | Reference |
+|-------------------------------------------|---------------------------------| --- |
+| **Implemented in 1.0.0** | Support HTTP | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.0.0** | Support TCP | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.0.0** | Support Pub/Sub Event | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.1.1** | Provide Java SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.1.1** | Support HTTPS | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.2.0** | Support RocketMQ as EventStore | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.2.0** | Support Heartbeat | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.3.0** | Integrate with OpenSchema | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.3.0** | Integrate with OpenTelemetry | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.3.0** | Support CloudEvents | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.4.0** | Support gRPC | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.5.0** | Provide Golang SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.5.0** | Support Nacos Registry | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.5.0** | Support Mesh Bridge | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.5.0** | Support Federal Government | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.6.0 (to be released)** | Integrate with Consul | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.6.0 (to be released)** | Support Webhook | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **Implemented in 1.6.0 (to be released)** | Support etcd | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **In Progress** | Knative Eventing Infrastructure | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/790), [GSoC '22](https://issues.apache.org/jira/browse/COMDEV-463) |
+| **In Progress** | Dashboard | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/700), [GSoC '22](https://issues.apache.org/jira/browse/COMDEV-465) |
+| **In Progress** | Support Kafka as EventStore | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/676) |
+| **In Progress** | Support Pulsar as EventStore | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/676) |
+| **In Progress** | Support Dledger | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **In Progress** | Workflow | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **In Progress** | Support Redis | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **In Progress** | Support Mesh Bridge | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| **In Progress** | Support Zookeeper | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| Planned | Provide NodeJS SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/417) |
+| Planned | Transaction Event | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/697) |
+| Planned | Event Query Language (EQL) | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/778) |
+| Planned | Metadata consistency persistent | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/817) |
+| Planned | Rust SDK | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/815) |
+| Planned | WebAssembly Runtime | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/576) |
+| Planned | Filter Chain | [GitHub Issue](https://github.com/apache/incubator-eventmesh/issues/664) |
+
diff --git a/eventmesh-common/src/main/java/org/apache/eventmesh/common/Constants.java b/eventmesh-common/src/main/java/org/apache/eventmesh/common/Constants.java
index daa36e0..9c13e75 100644
--- a/eventmesh-common/src/main/java/org/apache/eventmesh/common/Constants.java
+++ b/eventmesh-common/src/main/java/org/apache/eventmesh/common/Constants.java
@@ -87,4 +87,30 @@
public static final String EVENTMESH_CONF_HOME = System.getProperty("confPath", System.getenv("confPath"));
+ public static final String PRODUCER_ID = "PRODUCER_ID";
+
+ public static final String CONSUMER_ID = "CONSUMER_ID";
+
+ public static final String BROADCAST_PREFIX = "broadcast-";
+
+ public static final String IS_BROADCAST = "isBroadcast";
+
+ public static final String CONSUMER_GROUP = "consumerGroup";
+
+ public static final String PRODUCER_GROUP = "producerGroup";
+
+ public static final String INSTANCE_NAME = "instanceName";
+
+ public static final String ACCESS_POINTS = "ACCESS_POINTS";
+
+ public static final String REGION = "REGION";
+
+ public static final String MESSAGE_MODEL = "MESSAGE_MODEL";
+
+ public static final String NAMESPACE = "namespace";
+
+ public static final String RMQ_PRODUCER_GROUP = "RMQ_PRODUCER_GROUP";
+
+ public static final String OPERATION_TIMEOUT = "OPERATION_TIMEOUT";
+
}
diff --git a/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/consumer/RocketMQConsumerImpl.java b/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/consumer/RocketMQConsumerImpl.java
index eaf2a42..a263065 100644
--- a/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/consumer/RocketMQConsumerImpl.java
+++ b/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/consumer/RocketMQConsumerImpl.java
@@ -20,7 +20,7 @@
import org.apache.eventmesh.api.AbstractContext;
import org.apache.eventmesh.api.EventListener;
import org.apache.eventmesh.api.consumer.Consumer;
-import org.apache.eventmesh.connector.rocketmq.common.Constants;
+import org.apache.eventmesh.common.Constants;
import org.apache.eventmesh.connector.rocketmq.config.ClientConfiguration;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
@@ -46,24 +46,24 @@
public synchronized void init(Properties keyValue) throws Exception {
final ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.init();
- boolean isBroadcast = Boolean.parseBoolean(keyValue.getProperty("isBroadcast"));
+ boolean isBroadcast = Boolean.parseBoolean(keyValue.getProperty(Constants.IS_BROADCAST));
- String consumerGroup = keyValue.getProperty("consumerGroup");
+ String consumerGroup = keyValue.getProperty(Constants.CONSUMER_GROUP);
if (isBroadcast) {
consumerGroup = Constants.BROADCAST_PREFIX + consumerGroup;
}
String namesrvAddr = clientConfiguration.namesrvAddr;
- String instanceName = keyValue.getProperty("instanceName");
+ String instanceName = keyValue.getProperty(Constants.INSTANCE_NAME);
Properties properties = new Properties();
- properties.put("ACCESS_POINTS", namesrvAddr);
- properties.put("REGION", "namespace");
- properties.put("instanceName", instanceName);
- properties.put("CONSUMER_ID", consumerGroup);
+ properties.put(Constants.ACCESS_POINTS, namesrvAddr);
+ properties.put(Constants.REGION, Constants.NAMESPACE);
+ properties.put(Constants.INSTANCE_NAME, instanceName);
+ properties.put(Constants.CONSUMER_ID, consumerGroup);
if (isBroadcast) {
- properties.put("MESSAGE_MODEL", MessageModel.BROADCASTING.name());
+ properties.put(Constants.MESSAGE_MODEL, MessageModel.BROADCASTING.name());
} else {
- properties.put("MESSAGE_MODEL", MessageModel.CLUSTERING.name());
+ properties.put(Constants.MESSAGE_MODEL, MessageModel.CLUSTERING.name());
}
pushConsumer = new PushConsumerImpl(properties);
diff --git a/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/producer/AbstractProducer.java b/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/producer/AbstractProducer.java
index e95a47f..ade88f5 100644
--- a/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/producer/AbstractProducer.java
+++ b/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/producer/AbstractProducer.java
@@ -18,6 +18,7 @@
package org.apache.eventmesh.connector.rocketmq.producer;
import org.apache.eventmesh.api.exception.ConnectorRuntimeException;
+import org.apache.eventmesh.common.Constants;
import org.apache.eventmesh.connector.rocketmq.config.ClientConfig;
import org.apache.eventmesh.connector.rocketmq.exception.RMQMessageFormatException;
import org.apache.eventmesh.connector.rocketmq.exception.RMQTimeoutException;
@@ -46,7 +47,6 @@
protected final AtomicBoolean started = new AtomicBoolean(false);
// private boolean started = false;
private final ClientConfig clientConfig;
- private static final String PRODUCER_ID = "PRODUCER_ID";
AbstractProducer(final Properties properties) {
this.properties = properties;
@@ -67,7 +67,7 @@
this.rocketmqProducer.setInstanceName(producerId);
this.rocketmqProducer.setMaxMessageSize(1024 * 1024 * 4);
this.rocketmqProducer.setLanguage(LanguageCode.OMS);
- properties.put(PRODUCER_ID, producerId);
+ properties.put(Constants.PRODUCER_ID, producerId);
}
public synchronized void start() {
diff --git a/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/producer/RocketMQProducerImpl.java b/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/producer/RocketMQProducerImpl.java
index 03c870f..220cbfd 100644
--- a/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/producer/RocketMQProducerImpl.java
+++ b/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/producer/RocketMQProducerImpl.java
@@ -20,6 +20,7 @@
import org.apache.eventmesh.api.RequestReplyCallback;
import org.apache.eventmesh.api.SendCallback;
import org.apache.eventmesh.api.producer.Producer;
+import org.apache.eventmesh.common.Constants;
import org.apache.eventmesh.connector.rocketmq.common.EventMeshConstants;
import org.apache.eventmesh.connector.rocketmq.config.ClientConfiguration;
@@ -43,15 +44,15 @@
public synchronized void init(Properties keyValue) {
final ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.init();
- String producerGroup = keyValue.getProperty("producerGroup");
+ String producerGroup = keyValue.getProperty(Constants.PRODUCER_GROUP);
String omsNamesrv = clientConfiguration.namesrvAddr;
Properties properties = new Properties();
- properties.put("ACCESS_POINTS", omsNamesrv);
- properties.put("REGION", "namespace");
- properties.put("RMQ_PRODUCER_GROUP", producerGroup);
- properties.put("OPERATION_TIMEOUT", 3000);
- properties.put("PRODUCER_ID", producerGroup);
+ properties.put(Constants.ACCESS_POINTS, omsNamesrv);
+ properties.put(Constants.REGION, Constants.NAMESPACE);
+ properties.put(Constants.RMQ_PRODUCER_GROUP, producerGroup);
+ properties.put(Constants.OPERATION_TIMEOUT, 3000);
+ properties.put(Constants.PRODUCER_ID, producerGroup);
producer = new ProducerImpl(properties);
diff --git a/eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/ZipkinTraceService.java b/eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/ZipkinTraceService.java
index cf36da5..c6426b3 100644
--- a/eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/ZipkinTraceService.java
+++ b/eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/ZipkinTraceService.java
@@ -22,6 +22,7 @@
import org.apache.eventmesh.trace.api.EventMeshTraceService;
import org.apache.eventmesh.trace.api.config.ExporterConfiguration;
import org.apache.eventmesh.trace.api.exception.TraceException;
+import org.apache.eventmesh.trace.zipkin.common.ZipkinConstants;
import org.apache.eventmesh.trace.zipkin.config.ZipkinConfiguration;
import java.util.Map;
@@ -52,10 +53,6 @@
*
*/
public class ZipkinTraceService implements EventMeshTraceService {
- // Zipkin API Endpoints for uploading spans
- private static final String ENDPOINT_V2_SPANS = "/api/v2/spans";
- // Name of the service(using the instrumentationName)
- private final String serviceName = "eventmesh_trace";
private String eventMeshZipkinIP;
private int eventMeshZipkinPort;
private int eventMeshTraceExportInterval;
@@ -84,7 +81,7 @@
String httpUrl = String.format("http://%s:%s", eventMeshZipkinIP, eventMeshZipkinPort);
ZipkinSpanExporter zipkinExporter =
- ZipkinSpanExporter.builder().setEndpoint(httpUrl + ENDPOINT_V2_SPANS).build();
+ ZipkinSpanExporter.builder().setEndpoint(httpUrl + ZipkinConstants.ENDPOINT_V2_SPANS).build();
SpanProcessor spanProcessor = BatchSpanProcessor.builder(zipkinExporter)
.setScheduleDelay(eventMeshTraceExportInterval, TimeUnit.SECONDS)
@@ -95,7 +92,7 @@
//set the trace service's name
Resource serviceNameResource =
- Resource.create(Attributes.of(stringKey("service.name"), serviceName));
+ Resource.create(Attributes.of(stringKey("service.name"), ZipkinConstants.SERVICE_NAME));
sdkTracerProvider = SdkTracerProvider.builder()
.addSpanProcessor(spanProcessor)
@@ -108,7 +105,7 @@
.build();
//TODO serviceName???
- tracer = openTelemetry.getTracer(serviceName);
+ tracer = openTelemetry.getTracer(ZipkinConstants.SERVICE_NAME);
textMapPropagator = openTelemetry.getPropagators().getTextMapPropagator();
shutdownHook = new Thread(sdkTracerProvider::close);
diff --git a/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/common/Constants.java b/eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/common/ZipkinConstants.java
similarity index 62%
rename from eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/common/Constants.java
rename to eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/common/ZipkinConstants.java
index efbca5b..aa3ad33 100644
--- a/eventmesh-connector-plugin/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/common/Constants.java
+++ b/eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/common/ZipkinConstants.java
@@ -15,9 +15,14 @@
* limitations under the License.
*/
-package org.apache.eventmesh.connector.rocketmq.common;
+package org.apache.eventmesh.trace.zipkin.common;
-public class Constants {
+public class ZipkinConstants {
+ // Name of the service(using the instrumentationName)
+ public static final String SERVICE_NAME = "eventmesh_trace";
+ // Zipkin API Endpoints for uploading spans
+ public static final String ENDPOINT_V2_SPANS = "/api/v2/spans";
- public static final String BROADCAST_PREFIX = "broadcast-";
+ public static final String KEY_ZIPKIN_IP = "eventmesh.trace.zipkin.ip";
+ public static final String KEY_ZIPKIN_PORT = "eventmesh.trace.zipkin.port";
}
diff --git a/eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/config/ZipkinConfiguration.java b/eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/config/ZipkinConfiguration.java
index 5dfa9a4..c567e97 100644
--- a/eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/config/ZipkinConfiguration.java
+++ b/eventmesh-trace-plugin/eventmesh-trace-zipkin/src/main/java/org/apache/eventmesh/trace/zipkin/config/ZipkinConfiguration.java
@@ -17,6 +17,9 @@
package org.apache.eventmesh.trace.zipkin.config;
+import org.apache.eventmesh.common.Constants;
+import org.apache.eventmesh.trace.zipkin.common.ZipkinConstants;
+
import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
@@ -60,12 +63,12 @@
}
private void initializeConfig() {
- String eventMeshZipkinIPStr = properties.getProperty("eventmesh.trace.zipkin.ip");
+ String eventMeshZipkinIPStr = properties.getProperty(ZipkinConstants.KEY_ZIPKIN_IP);
Preconditions.checkState(StringUtils.isNotEmpty(eventMeshZipkinIPStr),
- String.format("%s error", "eventmesh.trace.zipkin.ip"));
+ String.format("%s error", ZipkinConstants.KEY_ZIPKIN_IP));
eventMeshZipkinIP = StringUtils.deleteWhitespace(eventMeshZipkinIPStr);
- String eventMeshZipkinPortStr = properties.getProperty("eventmesh.trace.zipkin.port");
+ String eventMeshZipkinPortStr = properties.getProperty(ZipkinConstants.KEY_ZIPKIN_PORT);
if (StringUtils.isNotEmpty(eventMeshZipkinPortStr)) {
eventMeshZipkinPort = Integer.parseInt(StringUtils.deleteWhitespace(eventMeshZipkinPortStr));
}
@@ -84,8 +87,7 @@
}
// get from config home
try {
- String configPath =
- System.getProperty("confPath", System.getenv("confPath")) + File.separator + CONFIG_FILE;
+ String configPath = Constants.EVENTMESH_CONF_HOME + File.separator + CONFIG_FILE;
if (new File(configPath).exists()) {
properties.load(new BufferedReader(new FileReader(configPath)));
}