From ebef344d55b295a1b25055ed592a72b7da07f078 Mon Sep 17 00:00:00 2001
From: seeflood <349895584@qq.com>
Date: Tue, 11 Jan 2022 14:32:12 +0800
Subject: [PATCH 1/2] improve contributor guide
---
README-zh.md | 75 +++++++++++++++++++++++++++++++++-------------------
README.md | 3 +++
2 files changed, 51 insertions(+), 27 deletions(-)
diff --git a/README-zh.md b/README-zh.md
index 7665946..9c7e07a 100644
--- a/README-zh.md
+++ b/README-zh.md
@@ -1,36 +1,39 @@
## 如何使用java sdk
+
### 1. import sdk
+
对于 Maven 项目,将以下配置添加进 `pom.xml` 文件:
+
```xml
+
- ...
-
...
-
- io.mosn.layotto
- runtime-sdk-parent
- 1.0.0
-
+
+ ...
+
+ io.mosn.layotto
+ runtime-sdk-parent
+ 1.0.0
+
+ ...
+
...
-
- ...
```
### 2. 运行 examples 示例
+
可以本地部署redis和Layotto,然后运行java应用示例,通过java sdk调Layotto,Layotto转发给redis
#### 第一步:部署redis
-1. 取最新版的 Redis 镜像。
- 这里我们拉取官方的最新版本的镜像:
+1. 取最新版的 Redis 镜像。 这里我们拉取官方的最新版本的镜像:
```shell
docker pull redis:latest
```
-2. 查看本地镜像
- 使用以下命令来查看是否已安装了 redis:
+2. 查看本地镜像 使用以下命令来查看是否已安装了 redis:
```shell
docker images
@@ -74,37 +77,46 @@ mvn clean install
```
#### 第三步:运行java sdk示例
+
通过以下Examples示例来了解如何使用SDK:
+
* [Hello world](./examples/src/test/java/io/mosn/layotto/examples/helloworld)
* [State management](./examples/src/test/java/io/mosn/layotto/examples/state)
* [Pubsub API](./examples/src/test/java/io/mosn/layotto/examples/pubsub)
* [File API](./examples/src/test/java/io/mosn/layotto/examples/file)
-## java sdk开发指南
-### java sdk职责
-1. sdk负责对Layotto的grpc API进行封装、不应该有任何中间件的定制逻辑,比如不应该出现redis、rocketmq等产品相关的逻辑。
+## sdk开发指南
+
+### layotto sdk的职责
+
+
+
+1. sdk负责对Layotto的grpc API进行封装。sdk内不应该有任何中间件的定制逻辑,比如不应该出现redis、rocketmq等产品相关的逻辑。
+
+2. sdk需要把所有跟通信协议相关的东西(比如proto编译出来的stub类)屏蔽掉,请勿让public方法暴露出任何跟协议相关的东西,最好protected方法也不暴露proto相关的东西。 这么做是因为将来可能改grpc
+ API的package路径,甚至哪天不用grpc了(比如换成http协议)。总之请让用户不用关心协议。
-2. sdk需要把所有跟通信协议相关的东西(比如proto编译出来的stub类)屏蔽掉,请勿让public方法暴露出任何跟协议相关的东西,最好protected方法也不暴露proto相关的东西。
- 这么做是因为将来可能改grpc API的package路径,甚至哪天不用grpc了(谁知道呢)。总之请让用户不用关心协议。
+举个例子, state API对应有个`deleteState`方法,需要传`DeleteStateRequest`对象。
-举个例子, state API对应有个`deleteState`方法,需要传`DeleteStateRequest`对象。
```java
- /**
- * Delete a state.
- *
- * @param request Request to delete a state.
- */
+/**
+ * Delete a state.
+ *
+ * @param request Request to delete a state.
+ */
void deleteState(DeleteStateRequest request);
```
+
这个`DeleteStateRequest`是sdk定义的,其实sdk会把它转成 `RuntimeProto.DeleteStateRequest` (proto编译出来的类) 。
-你可能会问:为什么不能直接传`RuntimeProto.DeleteStateRequest` 呢?
+你可能会问:为什么不能让用户直接传`RuntimeProto.DeleteStateRequest` 呢?
-这就是上面说的原因,sdk需要封装掉协议相关的东西
+这就是上面说的原因,sdk需要封装掉协议相关的东西,如果让用户直接传pb类,以后换协议就不好换了
### 想为某个grpc API提供java sdk,需要做哪些事情?
+
举个例子,grpc API里添加了file API,现在想为java sdk开发file API相关功能,需要做哪些事情?
1. 先找个java sdk的demo跑起来,然后看懂java sdk是怎么创建对象、怎么调用的。其实java sdk就是把grpc包了一层,封装掉grpc的一些stub类,逻辑不多。
@@ -112,36 +124,45 @@ mvn clean install
2. 参考pr [feat(java-sdk): java sdk support File API](https://github.com/mosn/layotto/pull/325) . 这个pr 给java sdk添加了file API相关功能
### 如何格式化 java sdk 代码
+
提交pull request之前先用maven编译一下
```shell
mvn clean compile
```
+
会自动格式化您的代码
### 如何将proto文件编译成java代码
#### 1. 下载编译工具 [protoc](https://github.com/protocolbuffers/protobuf/releases)
+
my protoc version:
+
```shell
$ protoc --version
libprotoc 3.11.2
```
#### 2. 修改对应`proto`文件生成类名包名等信息
+
(需先修改文件内部service名)
-`spec/proto/runtime/v1/appcallback.proto` :
+`spec/proto/runtime/v1/appcallback.proto` :
+
```protobuf
option java_outer_classname = "AppCallbackProto";
option java_package = "spec.proto.runtime.v1";
```
+
`spec/proto/runtime/v1/runtime.proto` :
+
```protobuf
option java_outer_classname = "RuntimeProto";
option java_package = "spec.proto.runtime.v1";
```
#### 3. 编译其对应`JAVA`文件
+
```shell
cd ${your PROJECT path}/spec/proto/runtime/v1
protoc -I=. --java_out=../../../../sdk/java-sdk/sdk/src/main/java/ runtime.proto
diff --git a/README.md b/README.md
index ac984bd..9e42cc3 100644
--- a/README.md
+++ b/README.md
@@ -52,6 +52,9 @@ Try the following examples to learn more about this SDK:
* [File API](./examples/src/test/java/io/mosn/layotto/examples/file)
## java sdk developer guide
+
+
+
### How to format java sdk code
Compile before submit your pull request:
From cacb0043a67a1ce840a6b1cd979c9beec2806eb5 Mon Sep 17 00:00:00 2001
From: seeflood <349895584@qq.com>
Date: Tue, 11 Jan 2022 14:37:04 +0800
Subject: [PATCH 2/2] improve contributor guide
---
README-zh.md | 21 ++++++++-------------
README.md | 11 -----------
2 files changed, 8 insertions(+), 24 deletions(-)
diff --git a/README-zh.md b/README-zh.md
index 9c7e07a..7936d29 100644
--- a/README-zh.md
+++ b/README-zh.md
@@ -5,20 +5,11 @@
对于 Maven 项目,将以下配置添加进 `pom.xml` 文件:
```xml
-
-
- ...
-
- ...
io.mosn.layotto
runtime-sdk-parent
1.0.0
- ...
-
- ...
-
```
### 2. 运行 examples 示例
@@ -27,13 +18,17 @@
#### 第一步:部署redis
-1. 取最新版的 Redis 镜像。 这里我们拉取官方的最新版本的镜像:
+1. 取最新版的 Redis 镜像。
+
+这里我们拉取官方的最新版本的镜像:
```shell
docker pull redis:latest
```
-2. 查看本地镜像 使用以下命令来查看是否已安装了 redis:
+2. 查看本地镜像
+
+使用以下命令来查看是否已安装了 redis:
```shell
docker images
@@ -93,8 +88,8 @@ mvn clean install
1. sdk负责对Layotto的grpc API进行封装。sdk内不应该有任何中间件的定制逻辑,比如不应该出现redis、rocketmq等产品相关的逻辑。
-2. sdk需要把所有跟通信协议相关的东西(比如proto编译出来的stub类)屏蔽掉,请勿让public方法暴露出任何跟协议相关的东西,最好protected方法也不暴露proto相关的东西。 这么做是因为将来可能改grpc
- API的package路径,甚至哪天不用grpc了(比如换成http协议)。总之请让用户不用关心协议。
+2. sdk需要把所有跟通信协议相关的东西(比如proto编译出来的stub类)屏蔽掉,请勿让public方法暴露出任何跟协议相关的东西,最好protected方法也不暴露proto相关的东西。
+这么做是因为将来可能改grpc API的package路径,甚至哪天不用grpc了(比如换成http协议)。总之请让用户不用关心协议。
举个例子, state API对应有个`deleteState`方法,需要传`DeleteStateRequest`对象。
diff --git a/README.md b/README.md
index 9e42cc3..51d2fe4 100644
--- a/README.md
+++ b/README.md
@@ -3,19 +3,11 @@
### 1. import sdk
For a Maven project, add the following to your `pom.xml` file:
```xml
-
- ...
-
- ...
io.mosn.layotto
runtime-sdk-parent
1.0.0
- ...
-
- ...
-
```
### 2. Run the examples
@@ -42,9 +34,6 @@ cd ${projectpath}/sdk/java-sdk
mvn clean install
```
-
-
-
Try the following examples to learn more about this SDK:
* [Hello world](./examples/src/test/java/io/mosn/layotto/examples/helloworld)
* [State management](./examples/src/test/java/io/mosn/layotto/examples/state)