From 56b665be7aefa3fb8a2eeb2712139993afa38cca Mon Sep 17 00:00:00 2001 From: Wenjun Ruan Date: Wed, 22 Dec 2021 00:57:47 +0800 Subject: [PATCH] Update java sdk docs (#663) --- .../eventmesh-sdk-java-quickstart.md | 32 ++++++------ .../eventmesh-sdk-java-quickstart.md | 48 ++++++++---------- docs/images/eventmesh-test-structure.png | Bin 21818 -> 0 bytes 3 files changed, 37 insertions(+), 43 deletions(-) delete mode 100644 docs/images/eventmesh-test-structure.png diff --git a/docs/cn/instructions/eventmesh-sdk-java-quickstart.md b/docs/cn/instructions/eventmesh-sdk-java-quickstart.md index d1b783c3ae..f37bd20fbd 100644 --- a/docs/cn/instructions/eventmesh-sdk-java-quickstart.md +++ b/docs/cn/instructions/eventmesh-sdk-java-quickstart.md @@ -1,54 +1,52 @@ +[![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.eventmesh/eventmesh-sdk-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/org.apache.eventmesh/eventmesh-sdk-java) + # 如何运行 eventmesh-sdk-java 演示 -> Eventmesh-sdk-java作为客户端,与eventmesh-runtime通信,用于完成消息的发送和接收。 +> EventMesh-sdk-java作为客户端,与eventmesh-runtime通信,用于完成消息的发送和接收。 > -> Eventmesh-sdk-java支持异步消息和广播消息。异步消息表示生产者只发送消息,不关心回复消息。广播消息表示生产者发送一次消息,所有订阅广播主题的消费者都将收到消息 +> EventMesh-sdk-java支持异步消息和广播消息。异步消息表示生产者只发送消息,不关心回复消息。广播消息表示生产者发送一次消息,所有订阅广播主题的消费者都将收到消息 > -> Eventmesh-sdk-java支持HTTP和TCP协议。 - -TCP 和 Http 示例都在**eventmesh-test**模块下 - -**注意**:下载了源代码后,需要将`/conf/application.properties` 和 `/conf/log4j2.xml` 复制到 `resources` 目录下 +> EventMesh-sdk-java支持HTTP和TCP协议。 -![image-test-structure](../../images/eventmesh-test-structure.png) +TCP 和 HTTP 示例都在**eventmesh-example**模块下 ### 1. TCP DEMO

异步消息

-- 创建主题TEST-TOPIC-TCP-ASYNC,可以通过rocketmq-console或者rocketmq tools 命令 +- 创建主题TEST-TOPIC-TCP-ASYNC,可以通过rocketmq-console或者rocketmq tools 命令 - 启动消费者,订阅上一步骤已经创建的Topic ``` -运行org.apache.eventmesh.tcp.demo.AsyncSubscribe的主要方法 +运行org.apache.eventmesh.tcp.demo.sub.eventmeshmessage.AsyncSubscribe的主要方法 ``` - 启动发送端,发送消息 ``` -运行org.apache.eventmesh.tcp.demo.AsyncPublish的主要方法 +运行org.apache.eventmesh.tcp.demo.pub.eventmeshmessage.AsyncPublish的主要方法 ```

广播消息

-- 创建主题TEST-TOPIC-TCP-BROADCAST,可以通过rocketmq-console或者rocketmq tools 命令 +- 创建主题TEST-TOPIC-TCP-BROADCAST,可以通过rocketmq-console或者rocketmq tools 命令 - 启动消费端,订阅上一步骤已经创建的Topic ``` -运行org.apache.eventmesh.tcp.demo.AsyncSubscribeBroadcast的主要方法 +运行org.apache.eventmesh.tcp.demo.sub.eventmeshmessage.AsyncSubscribeBroadcast的主要方法 ``` - 启动发送端,发送广播消息 ``` -运行org.apache.eventmesh.tcp.demo.AsyncPublishBroadcast的主要方法 +运行org.apache.eventmesh.tcp.demo.pub.eventmeshmessage.AsyncPublishBroadcast的主要方法 ``` ### 2. HTTP演示 -> 对于http,eventmesh-sdk-java对对于异步事件实现了发送与订阅 +> 对于HTTP,eventmesh-sdk-java对对于异步事件实现了发送与订阅 > >在演示中,Java类`LiteMessage`的`content`字段表示一个特殊的协议,因此,如果您要使用eventmesh-sdk-java的http-client,则只需设计协议的内容并在同一时间提供消费者的应用程序。 @@ -56,7 +54,7 @@ TCP 和 Http 示例都在**eventmesh-test**模块下 > 生产者将事件发送给下游即可,无需等待响应 -- 创建主题TEST-TOPIC-HTTP-ASYNC,可以通过rocketmq-console或者rocketmq tools 命令 +- 创建主题TEST-TOPIC-HTTP-ASYNC,可以通过rocketmq-console或者rocketmq tools 命令 - 启动消费端,订阅Topic @@ -69,7 +67,7 @@ TCP 和 Http 示例都在**eventmesh-test**模块下 - 启动发送端,发送消息 ``` -运行org.apache.eventmesh.http.demo.AsyncPublishInstance的主要方法 +运行org.apache.eventmesh.http.demo.pub.eventmeshmessage.AsyncPublishInstance的主要方法 ``` diff --git a/docs/en/instructions/eventmesh-sdk-java-quickstart.md b/docs/en/instructions/eventmesh-sdk-java-quickstart.md index 7192e1ecd7..06ed6c717d 100644 --- a/docs/en/instructions/eventmesh-sdk-java-quickstart.md +++ b/docs/en/instructions/eventmesh-sdk-java-quickstart.md @@ -1,65 +1,61 @@ +[![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.eventmesh/eventmesh-sdk-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/org.apache.eventmesh/eventmesh-sdk-java) # How to run eventmesh-sdk-java demo -> Eventmesh-sdk-java , as the client, communicated with eventmesh-runtime, used to complete the sending and receiving of message. +> EventMesh-sdk-java, as the client, communicated with eventmesh-runtime, used to complete the sending and receiving of message. > -> Eventmesh-sdk-java supports async msg and broadcast msg. Async msg means the producer just sends msg and does not care reply msg.Broadcast msg means the producer send msg once and all the consumer subscribed the broadcast topic will receive the msg. +> Supports async msg and broadcast msg. Async msg means the producer just sends msg and does not care reply msg. Broadcast msg means the producer send msg once and all the consumer subscribed the broadcast topic will receive the msg. > -> Eventmesh-sdk-java supports the protocol of HTTP and TCP. +> EventMesh-sdk-java supports the protocol of HTTP and TCP. -TCP demos and Http demos are both under the **eventmesh-test** module. - -**prerequisite**:after download the source code you should copy `/conf/application.properties` and `/conf/log4j2.xml` to -the `resources` directory - -![image-test-structure](../../images/eventmesh-test-structure.png) +TCP demos and HTTP demos are both under the **eventmesh-example** module. ### 1. TCP DEMO #### Async msg -- create topic TEST-TOPIC-TCP-ASYNC on rocketmq-console - -- start consumer ,subscribe topic in previous step. +- Create topic TEST-TOPIC-TCP-ASYNC on rocketmq-console + +- Start consumer, subscribe topic in previous step. ``` -Run the main method of org.apache.eventmesh.tcp.demo.AsyncSubscribe +Run the main method of org.apache.eventmesh.tcp.demo.sub.eventmeshmessage.AsyncSubscribe ``` -- start producer, send message +- Start producer, send message ``` -Run the main method of org.apache.eventmesh.tcp.demo.AsyncPublish +Run the main method of org.apache.eventmesh.tcp.demo.pub.eventmeshmessage.AsyncPublish ``` #### Broadcast msg -- create topic TEST-TOPIC-TCP-BROADCAST on rocketmq-console +- Create topic TEST-TOPIC-TCP-BROADCAST on rocketmq-console -- start consumer ,subscribe topic in previous step. +- Start consumer, subscribe topic in previous step. ``` -Run the main method of org.apache.eventmesh.tcp.demo.AsyncSubscribeBroadcast +Run the main method of org.apache.eventmesh.tcp.demo.sub.eventmeshmessage.AsyncSubscribeBroadcast ``` -* start producer, send broadcast message +* Start producer, send broadcast message ``` -Run the main method of org.apache.eventmesh.tcp.demo.AsyncPublishBroadcast +Run the main method of org.apache.eventmesh.tcp.demo.pub.eventmeshmessage.AsyncPublishBroadcast ``` ### 2. HTTP DEMO -> As to http, eventmesh-sdk-java implements the pub and sub for async event . +> As to HTTP, eventmesh-sdk-java implements the pub and sub for async event . > -> In the demo ,the field of `content` of the java class `LiteMessage` represents a special protocal, so if you want to use http-client of eventmesh-sdk-java, you just need to design the content of protocal and supply the consumer appliacation at the same time. +> In the demo, the field of `content` of the java class `LiteMessage` represents a special protocal, so if you want to use http-client of eventmesh-sdk-java, you just need to design the content of protocal and supply the consumer application at the same time. #### Async event > producer send the event to consumer and don't need waiting response msg from consumer -- create topic TEST-TOPIC-HTTP-ASYNC on rocketmq-console +- Create topic TEST-TOPIC-HTTP-ASYNC on rocketmq-console -- start consumer, subscribe topic +- Start consumer, subscribe topic Async consumer demo is a spring boot application demo, you can easily run this demo to start service and subscribe the topic. @@ -68,9 +64,9 @@ Run the main method of org.apache.eventmesh.tcp.demo.AsyncPublishBroadcast Run the main method of org.apache.eventmesh.http.demo.sub.SpringBootDemoApplication ``` -- start producer, produce msg +- Start producer, produce msg ``` -Run the main method of org.apache.eventmesh.http.demo.AsyncPublishInstance +Run the main method of org.apache.eventmesh.http.demo.pub.eventmeshmessage.AsyncPublishInstance ``` diff --git a/docs/images/eventmesh-test-structure.png b/docs/images/eventmesh-test-structure.png deleted file mode 100644 index b783f1edb00e92a089efa0ea1716c0fbe11de4c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21818 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