对于 Maven 项目,将以下配置添加进 pom.xml
文件:
<dependency>
<groupId>io.mosn.layotto</groupId>
<artifactId>runtime-sdk-parent</artifactId>
<version>1.0.0</version>
</dependency>
可以本地部署redis和Layotto,然后运行java应用示例,通过java sdk调Layotto,Layotto转发给redis
- 取最新版的 Redis 镜像。
这里我们拉取官方的最新版本的镜像:
docker pull redis:latest
- 查看本地镜像
使用以下命令来查看是否已安装了 redis:
docker images
- 运行容器
安装完成后,我们可以使用以下命令来运行 redis 容器:
docker run -itd --name redis-test -p 6380:6379 redis
参数说明:
-p 6380:6379:映射容器服务的 6379 端口到宿主机的 6380 端口。外部可以直接通过宿主机ip:6380 访问到 Redis 的服务。
clone仓库到本地:
git clone https://github.com/mosn/layotto.git
构建并运行Layotto:
# make sure you replace this` ${projectpath}` with your own project path.
cd ${projectpath}/cmd/layotto
go build
./layotto start -c ../../configs/config_redis.json
构建java-sdk Maven (Apache Maven version 3.x) 项目:
# make sure you replace this` ${projectpath}` with your own project path.
cd ${projectpath}/sdk/java-sdk
mvn clean install
通过以下Examples示例来了解如何使用SDK:
-
sdk负责对Layotto的grpc API进行封装。sdk内不应该有任何中间件的定制逻辑,比如不应该出现redis、rocketmq等产品相关的逻辑。
-
sdk需要把所有跟通信协议相关的东西(比如proto编译出来的stub类)屏蔽掉,请勿让public方法暴露出任何跟协议相关的东西,最好protected方法也不暴露proto相关的东西。 这么做是因为将来可能改grpc API的package路径,甚至哪天不用grpc了(比如换成http协议)。总之请让用户不用关心协议。
举个例子, state API对应有个deleteState
方法,需要传DeleteStateRequest
对象。
/**
* Delete a state.
*
* @param request Request to delete a state.
*/
void deleteState(DeleteStateRequest request);
这个DeleteStateRequest
是sdk定义的,其实sdk会把它转成 RuntimeProto.DeleteStateRequest
(proto编译出来的类) 。
你可能会问:为什么不能让用户直接传RuntimeProto.DeleteStateRequest
呢?
这就是上面说的原因,sdk需要封装掉协议相关的东西,如果让用户直接传pb类,以后换协议就不好换了
举个例子,grpc API里添加了file API,现在想为java sdk开发file API相关功能,需要做哪些事情?
-
先找个java sdk的demo跑起来,然后看懂java sdk是怎么创建对象、怎么调用的。其实java sdk就是把grpc包了一层,封装掉grpc的一些stub类,逻辑不多。
-
参考pr feat(java-sdk): java sdk support File API . 这个pr 给java sdk添加了file API相关功能
提交pull request之前先用maven编译一下
mvn clean compile
会自动格式化您的代码
make proto
The script will download the layotto proto files and compile them automatically.
(需先修改文件内部service名)
spec/proto/runtime/v1/appcallback.proto
:
option java_outer_classname = "AppCallbackProto";
option java_package = "spec.proto.runtime.v1";
spec/proto/runtime/v1/runtime.proto
:
option java_outer_classname = "RuntimeProto";
option java_package = "spec.proto.runtime.v1";
cd ${your PROJECT path}
mvn compile
Our CI will do it automatically.
- The CI will build and publish the jars to the maven central repo after a new PR get merged.
If it's a snapshot version, e.g. 1.2.0-SNAPSHOT
, it will be published to the central snapshot
repo;
If it's not a snapshot version, e.g. 1.2.0
, it will be published to the central staging
repo.
Check the Release
pipeline for more details.
- After maintainers release a new version in github, our
Release without staging
pipeline will publish the jars to the centralrelease
repo instead of thestaging
repo.