@@ -79,24 +79,55 @@ mvn clean install
79
79
* [ State management] ( ./examples/src/main/java/io/mosn/layotto/examples/state )
80
80
* [ Pubsub API] ( ./examples/src/main/java/io/mosn/layotto/examples/pubsub )
81
81
82
- ## 如何格式化 java sdk 代码
82
+ ## java sdk开发指南
83
+ ### java sdk职责
84
+ 1 . sdk负责对Layotto的grpc API进行封装、不应该有任何中间件的定制逻辑,比如不应该出现redis、rocketmq等产品相关的逻辑。
85
+
86
+ 2 . sdk需要把所有跟通信协议相关的东西(比如proto编译出来的stub类)屏蔽掉,请勿让public方法暴露出任何跟协议相关的东西,最好protected方法也不暴露proto相关的东西。
87
+ 这么做是因为将来可能改grpc API的package路径,甚至哪天不用grpc了(谁知道呢)。总之请让用户不用关心协议。
88
+
89
+ 举个例子, state API对应有个` deleteState ` 方法,需要传` DeleteStateRequest ` 对象。
90
+ ``` java
91
+
92
+ /**
93
+ * Delete a state.
94
+ *
95
+ * @param request Request to delete a state.
96
+ */
97
+ void deleteState(DeleteStateRequest request);
98
+
99
+ ```
100
+ 这个` DeleteStateRequest ` 是sdk定义的,其实sdk会把它转成 ` RuntimeProto.DeleteStateRequest ` (proto编译出来的类) 。
101
+
102
+ 你可能会问:为什么不能直接传` RuntimeProto.DeleteStateRequest ` 呢?
103
+
104
+ 这就是上面说的原因,sdk需要封装掉协议相关的东西
105
+
106
+ ### 想为某个grpc API提供java sdk,需要做哪些事情?
107
+ 举个例子,grpc API里添加了file API,现在想为java sdk开发file API相关功能,需要做哪些事情?
108
+
109
+ 1 . 先找个java sdk的demo跑起来,然后看懂java sdk是怎么创建对象、怎么调用的。其实java sdk就是把grpc包了一层,封装掉grpc的一些stub类,逻辑不多。
110
+
111
+ 2 . 参考pr [ feat(java-sdk): java sdk support File API] ( https://github.com/mosn/layotto/pull/325 ) . 这个pr 给java sdk添加了file API相关功能
112
+
113
+ ### 如何格式化 java sdk 代码
83
114
提交pull request之前先用maven编译一下
84
115
85
116
``` shell
86
117
mvn clean compile
87
118
```
88
119
会自动格式化您的代码
89
120
90
- ## 如何将proto文件编译成java代码
121
+ ### 如何将proto文件编译成java代码
91
122
92
- ### 1. 下载编译工具 [ protoc] ( https://github.com/protocolbuffers/protobuf/releases )
123
+ #### 1. 下载编译工具 [ protoc] ( https://github.com/protocolbuffers/protobuf/releases )
93
124
my protoc version:
94
125
``` shell
95
126
$ protoc --version
96
127
libprotoc 3.11.2
97
128
```
98
129
99
- ### 2. 修改对应` proto ` 文件生成类名包名等信息
130
+ #### 2. 修改对应` proto ` 文件生成类名包名等信息
100
131
(需先修改文件内部service名)
101
132
` spec/proto/runtime/v1/appcallback.proto ` :
102
133
``` protobuf
@@ -109,11 +140,15 @@ option java_outer_classname = "RuntimeProto";
109
140
option java_package = "spec.proto.runtime.v1";
110
141
```
111
142
112
- ### 3. 编译其对应` JAVA ` 文件
143
+ #### 3. 编译其对应` JAVA ` 文件
113
144
``` shell
114
145
cd ${your PROJECT path} /spec/proto/runtime/v1
115
146
protoc -I=. --java_out=../../../../sdk/java-sdk/sdk/src/main/java/ runtime.proto
116
147
protoc -I=. --java_out=../../../../sdk/java-sdk/sdk/src/main/java/ appcallback.proto
117
148
```
118
149
119
150
PS: 建议用maven插件` protoc-gen-grpc-java ` 生成protobuf和grpc的java代码
151
+
152
+ 如果您在使用 [ IntelliJ IDEA] ( https://www.jetbrains.com/help/idea/discover-intellij-idea.html ) ,双击 Maven插件中的 ` compile ` , IDE 会自动帮你编译 proto 文件:
153
+
154
+ ![ img.png] ( ../../docs/img/sdk/img.png )
0 commit comments