Solon v3.0.3

Solon Rpc 应用开发

</> markdown

常见的 Solon Rpc 开发,会有三部分组成:

  • 服务的接口申明(会被下面两方引用)
  • 服务的实现或提供方(一般是独立的服务)
  • 服务的使用或消费方

1、服务接口定义

新建项目:userapi.client

接口的定义,可以不引入任何框架。但它,必须独立成存,有完整的领域独立性。切不要把它放到 common 之类的概念里。

//
// 注意:函数名不能相同!!!
//
public interface UserService{
    void add(User user);
    User getById(long userId);
}

附带数据实体定义(实体要实现 Serializable,以适应任何序列化方案)

@Data
public class User implements Serializable{ 
    long userId;
    String name;
    int level;
}

2、服务端项目,服务实现

新建项目:userapi (引入依赖:userapi.client)

本案采用 http + json 架构,只需引入:solon-api 或者 solon-web 或者 solon-rpc 即可。实际上,开发与 web 项目没太大区别。

应用主要配置

server.port: 9001

solon.app:
  group: "demo"
  name: "userapi"

应用主要代码

public class ServerApp{
    public static void main(String[] args){
        Solon.start(ServerApp.class, args);
    }
}

@Maping("/rpc/v1/user")
@Remoting
public class UserServiceImpl implements UserService{
    @Inject
    UserMapper userMapper;
    
    @Override
    public void add(User user){
        userMapper.add(user);
    }
    
    @Override
    public User getById(long userId){
        return userMapper.getById(userId);
    }
}

打包后,启动服务

java -jar userapi.jar

3、客户端项目,服务消费

新建项目:userdemo (引入依赖:userapi.client)

本案采用 http + json 架构,只需引入:solon-rpc 即可(它集成了rpc客户端需要的组件)。开发与web项目也没啥区别。

应用主要配置

server.port: 8081

solon.app:
  group: "demo"
  name: "userdemo"

应用主要代码

public class ClientApp{
    public static void main(String[] args){
        Solon.start(ClientApp.class, args);
    }
}

@Maping("user")
@Controller
public class UserController {
    //直接指定地址和序列化方案
    @NamiClient(url = "http://localhost:9001/rpc/v1/user", headers = ContentTypes.JSON)
    UserService userService;
    
    @Post
    @Mapping("register")
    public Result register(User user){
        //调用远程服务,添加用户
        userService.add(user);
        
        return Result.succeed();
    }
   
}

打包后,启动服务。要与 server 的端口不同,这样可以在本机同时运行两个服务。

java -jar userdemo.jar