Solon

Solon Rpc 超时和心跳控制

</> markdown

有些场景请求得半小时,有些则1秒。

1、请求超时的控制(对 http、socket、websocket 通道都有效)

  • 使用注解控制 timeout (单位:秒)
//在接口使用时配置
@NamiClient(name = "userapi",  path="/rpc/v1/user", timeout=60*5)
UserService userService;

//或者 

//在接口申明时配置
@NamiClient(name = "userapi",  path="/rpc/v1/user", timeout=60*5)
public class UserService{
   //..
}
  • 使用构建器
UserService userService = Nami.builder().name("userapi").path("/rpc/v1/user")
                                       .timeout(60*5)
                                       .decoder(SnackDecoder.instance)
                                       .encoder(SnackTypeEncoder.instance)
                                       .create(UserService.class);
  • 使用全局配置(会对全局有影响,使用时注意)
@Configuration
public class Config {
    @Bean
    public NamiConfiguration initNami(){
        return new NamiConfiguration() {
            @Override
            public void config(NamiClient client, NamiBuilder builder) {
                builder.timeout(60*5);
                builder.decoder(SnackDecoder.instance);
                builder.encoder(SnackTypeEncoder.instance);
            }
        };
    }
}

2、心跳间隔控制(仅对 socket、websocket 通道有效)

  • 使用注解控制 heartbeat (单位:少)
@NamiClient(name = "userapi",  path="/rpc/v1/user", heartbeat=30);
UserService userService;
  • 使用构建器
UserService userService = Nami.builder().name("userapi").path("/rpc/v1/user")
                                       .heartbeat(30)
                                       .decoder(SnackDecoder.instance)
                                       .encoder(SnackTypeEncoder.instance)
                                       .create(UserService.class);
  • 使用全局配置(会对全局有影响,使用时注意)
@Configuration
public class Config {
    @Bean
    public NamiConfiguration initNami(){
        return new NamiConfiguration() {
            @Override
            public void config(NamiClient client, NamiBuilder builder) {
                builder.heartbeat(30)
                builder.decoder(SnackDecoder.instance);
                builder.encoder(SnackTypeEncoder.instance);
            }
        };
    }
}