字符串操作
字符串切片
字符串的第一个字符,编号为0,右邻的字符编号,一次增加1
取字符串切片的语法有两种
${变量:位置起点}
由指定的位置开始,截取子字符串到字符串结束
1 | str="123456" |
${变量:位置起点:长度}
1 | str="123456" |
通过实现RequestInterceptor接口来实现Feign的拦截器,实现apply方法
1 | public class FeignRequestInterceptor implements RequestInterceptor |
首先通过@EnableFeignClients注解开启Feign功能,程序启动时开启对@FeignClient注解的扫描
1 | @Retention(RetentionPolicy.RUNTIME) |
当接口的方法调用时,通过动态代理SynchronousMethodHandler生成具体的RequestTemplate
1 | public Object invoke(Object[] argv) throws Throwable { |
1 | RequestTemplate template = buildTemplateFromArgs.create(argv); |
在构建RequestTemplate的时候会进行参数解析,如果参数是@RequestBody的会调用Encoder的encode方法进行编码(BuildEncodedTemplateFromArgs)
1 | encoder.encode(body, metadata.bodyType(), mutable); |
再根据RequestTemplate生成HTTP的Request对象
Request对象交给Client处理,可配置HttpURLConnection、HttpClient、OkHttp等
1 | // 该方法首先会调用RequestInterceptor的apply方法处理请求,之后才会进行请求发送 |
Client被封装到LoadBalanceClient类进行负载均衡
1 | Object executeAndDecode(RequestTemplate template, Options options) throws Throwable { |
linux有一个很重要的日志文件/var/log/messages,是核心系统文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO错误、网络错误和其他系统错误都会记录到这个文件中
可以用该日志判断进程是否被Killer杀死掉。
在文件里查找下,是否有之前pid对应的进程Kill信息,或者进程名,比如我们这里说的是Java应用,就直接查Java的就可以,像这样的内容,
“Out of memory: Kill process 31201 (java) score 783 or sacrifice child
Linux Kernel的这个Killer,会在内存不足的时候kill掉任何不受保护的进程,从而释放内存,保证Kernel的运行
echo -17 > /proc/$PID/oom_adj 使得自己的进程受保护
/var/log/dmesg日志中记录了系统的启动信息,可以使用dmesg命令来查看,如果某个硬件有问题,使用这个命令是可以看到的
1 | dmesg | grep error |