Solon Rpc 开发定制
像上文示例中,通过 headers 申明了自己的内容类型(它会自动匹配对应的编码器):
@Maping("user")
public class UserController {
//指定服务名、路径和序列化方案(新的不用关注服务地址)
@NamiClient(name = "userapi", path="/rpc/v1/user", headers=ContentTypes.JSON);
UserService userService;
@Post
@Mapping("register")
public Result register(User user){
//调用远程服务,添加用户
userService.add(user);
return Result.succeed();
}
}
用起来,显然还是麻烦。
1、通过配置器进行定制(适合Aop模式)
@Configuration
public class Config {
@Bean
public NamiConfiguration initNami(){
return new NamiConfiguration() {
@Override
public void config(NamiClient client, NamiBuilder builder) {
//指定编码器与解码器
builder.decoder(SnackDecoder.instance);
builder.encoder(SnackTypeEncoder.instance);
}
};
}
}
经过定制后,就不需要指定内容类型了:
@Maping("user")
public class UserController {
//指定服务名、路径和序列化方案(新的不用关注服务地址)
@NamiClient(name = "userapi", path="/rpc/v1/user");
UserService userService;
@Post
@Mapping("register")
public Result register(User user){
//调用远程服务,添加用户
userService.add(user);
return Result.succeed();
}
}
2、基于构建器进行定制(适配手动模式)
public class DemoApp {
public static void main(String[] args){
Solon.start(DemoApp.class, args);
UserService userService = Nami.builder()
.name("userapi")
.path("/rpc/v1/user")
.decoder(SnackDecoder.instance)
.encoder(SnackTypeEncoder.instance)
.create(UserService.class);
userService.add(user);
}
}