Skip to content

移除一切复杂功能,只为做到最简单的服务调用

License

Notifications You must be signed in to change notification settings

devenami/simple-rpc

Repository files navigation

simple-rpc

移除一切复杂功能,只为做到最简单的服务调用。 本项目仅能作为理解RPC调用原理,若需在生产环境中使用,请酌量优化

使用文档

API

API模块提供了基础的接口信息, 客户端和服务端都需要引入该模块,服务器需实现API模块提供的接口, 客户端直接调用API提供的接口。

第一步:API需要引入simple-rpc-core项目:

<dependency>
  <groupId>top.feb13th</groupId>
  <artifactId>simple-rpc-core</artifactId>
  <version>${project.version}</version>
</dependency>

第二步:编写接口,接口可选是否标注top.feb13th.simple.rpc.core.Path注解。接口内的方法必须使用top.feb13th.simple.rpc.core.Path进行标注, 以下是个简单的例子:

import top.feb13th.simple.rpc.core.Path;

/**
 * 用户操作
 *
 * @author feb13th
 */
@Path("/user")
public interface UserOperation {

  /**
   * 根据id获取用户信息
   */
  @Path("/get/id")
  User getUser(int id);

  @Path("/add")
  void addUser(User user);
}

Server

Server需引入API项目,并实现API提供的接口。同时需要引入simple-rpc-server项目:

第一步:配置项目引用

<!-- API项目, 替换为自己的 -->
<dependency>
  <groupId>top.feb13th</groupId>
  <artifactId>simple-rpc-example-api</artifactId>
  <version>${project.version}</version>
</dependency>

<!-- 服务器项目 -->
<dependency>
  <groupId>top.feb13th</groupId>
  <artifactId>simple-rpc-server</artifactId>
  <version>${project.version}</version>
</dependency>

第二步:编写API提供的接口的实现类:

import top.feb13th.simple.rpc.example.api.User;
import top.feb13th.simple.rpc.example.api.UserOperation;

/**
 * 用户服务
 *
 * @author feb13th
 */
public class UserService implements UserOperation {

  @Override
  public User getUser(int id) {
    return User.builder().id(id).name("name" + id).age(18).build();
  }

  @Override
  public void addUser(User user) {
    System.out.println(user);
  }
}

第三步:启动服务器并注册服务

import top.feb13th.simple.rpc.server.SimpleServer;

/**
 * 服务器
 *
 * @author feb13th
 */
public class UserServer {

  public static void main(String[] args) {
    // 初始化服务器端口
    SimpleServer simpleServer = new SimpleServer(8888);
    // 注册服务, 可以在任何时候进行注册
    simpleServer.registerService(new UserService());
    // 启动服务, 可以将该方法放入异步线程进行执行
    simpleServer.run();
  }

}

Client

Client通过调用API提供的接口进行业务处理

第一步:配置项目引用

<!-- API项目, 替换为自己的 -->
<dependency>
  <groupId>top.feb13th</groupId>
  <artifactId>simple-rpc-example-api</artifactId>
  <version>${project.version}</version>
</dependency>

<!-- 客户端项目 -->
<dependency>
  <groupId>top.feb13th</groupId>
  <artifactId>simple-rpc-client</artifactId>
  <version>${revision}</version>
</dependency>

第二步:启动客户端,调用接口测试

import top.feb13th.simple.rpc.client.SimpleClient;
import top.feb13th.simple.rpc.example.api.User;
import top.feb13th.simple.rpc.example.api.UserOperation;

/**
 * 客户端管理用户, 请求服务器数据
 *
 * @author feb13th
 */
public class UserClient {

  public static void main(String[] args) {
    // 初始化客户端
    SimpleClient simpleClient = new SimpleClient("localhost", 8888);
    // 异步启动客户端
    new Thread(simpleClient).start();
    // 等待客户端启动完成
    simpleClient.await();
    // 生成 api 代理对象
    UserOperation userOperation = simpleClient.newProxyBean(UserOperation.class);
    
    // 执行业操作
    User user = userOperation.getUser(1);
    System.out.println(user.toString());
    userOperation.addUser(user);
  }

}

About

移除一切复杂功能,只为做到最简单的服务调用

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages