学习目标:
- kafka数据数据挤压
- tidb学习
- logback + TraceId 配合使用
- 事务处理
- Android 添加新年感觉
- sentinel 实践
学习内容:
-
kafka
kafka 中最近也是老是出现问题,小白用很多参数不是很了解,推过来数据,异常处理的时候,会造成数据挤压部分,最新生产上就出现了20多万的消费无法消费问题,要么等着让他消费掉
看到这个视频
https://www.bilibili.com/video/BV1gm4y1w7tN/
让我觉得顺序应该没有问题,异常表处理不足,重新发送等处理一些,但是大神视频里面解决方法还是不错的,大把抓反而解决了,到现在还不知道当时是怎么解决的。哎,一个苦战的小白。 -
tidb 学习 和基础学习
启动/home/tidb-deploy/tidb-4000/scripts
启动脚本run_tidb.sh
搭建环境 和 监控数据。添加之后,我就忙了,查看执行sql ,发现有几个sql 不是我们程序中写的,但是在tidb监控里面可以查看到,翻代码进行排查。
日志看的执行时间只是这个接口或方法的执行时间,tidb就是sql 的 执行快慢。
先记录tidb的学习文档吧,其他时间在查看吧
https://docs.pingcap.com/zh/tidb/stable/quick-start-with-tidb
掌握 Java 基本语法
时间mybatis 收集
ew.between(
" DATE_FORMAT(create_time,\'%Y-%m-%d\') ",
LocalDateTimeUtil.format(amsReserveBillDTO.getCreateTimes().get(0), "yyyy-MM-dd"),
LocalDateTimeUtil.format(amsReserveBillDTO.getCreateTimes().get(1), "yyyy-MM-dd"));
单个这样写
ew.eq(ObjectUtils.isNotEmpty(amsQueueMoreDTO.getSignTime()), "sign_time", LocalDateTimeUtil.format(amsQueueMoreDTO.getSignTime(), "yyyy-MM-dd"));
prometheus的启动
sudo docker run -d -p 19090:19090 -v /root/prometheus/data/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --web.enable-lifecycle --web.enable-admin-api --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles
添加监听,例如redis. java 项目数据库
@NotBlank(message=“不能为空”),居然不提示。
当我改别人留下的业务逻辑的时候,发现这个参数不提示,并不起作用。从controller 中一个一个去查看。
先在controller 中 是否有@Validated 在接口方法参数里面是否有@Valid ,发现这些 都有了。
还是不行,有从实体中出现,这个方法在实体的list 中,需要在实体list 参数上面也需要加上@Valid 解决了。
在实体中套实体也要加上@Valid
long 类型用notNull string 用NotBlank。 之前代码里面确实少了不少这东西。
积累发现,在add edit 方法中,有时候 写好多实体啊。
用inferface 方式来写,里面套好几个实体就可以了,方便查看,也方便修改,还不乱。
3、logback + TraceId 配合使用
TraceId 是一个接口从开始到结束,整个线路的id,例如登录接口,我们会打印日志,登录方法里面参数和结果,登录里面还掉了,其他接口的话,再走订单数量,未完成支付情况,vip 是否过期让其推送消息,等日志,都记录了下来,这个traceId 就把这些日志串联起来,保证了他们就是这个操作所产生的流程日志。
这样方便查看当时的业务场景,方便记录目前的业务数据,排错就会很快了。
logback 这个就是记录日志用的
在xml 里面添加
将log.info 输出的内容进行 保存下来,可以mq 发送日志系统,也可以保存数据库了
public class LogHandler extends AppenderBase {
append 方法进行。
然后就trace id 创建和获取了。
MDC.put(LogHandler.TRACE_ID, IdUtil.getSnowflake().nextIdStr());
String traceId = MDC.get(TRACE_ID);
就是组装参数进行保存数据了。
主要是对OncePerRequestFilter 自定义
主要方法
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) {
try {
// 如果是OPTIONS则结束请求
if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
response.setStatus(HttpStatus.NO_CONTENT.value());
return;
}
String uri = request.getRequestURI();
if (uri.matches(LOG_FILTER_EXCLUDE_PATH)) {
//不需要记录日志
chain.doFilter(request, response);
return;
}
MDC.put(LogHandler.TRACE_ID, IdUtil.getSnowflake().nextIdStr());
log.info("请求方法:{}", uri);
log.info("请求IP:{}", IpAddrUtils.getIpAddress(request));
ThtfUser user = SecurityUtils.getUser();
if (ObjectUtils.isNotEmpty(user)) {
log.info("请求用户id:{},用户名称:{}", user.getId(), user.getRealname());
}
long startTime = System.currentTimeMillis();
chain.doFilter(request, response);
// 调用接口完毕完毕
long interval = System.currentTimeMillis() - startTime;
int maxInterval = 3000;
if (interval > maxInterval) {
log.info("请求完成警告,耗时{}毫秒", interval);
} else {
log.info("请求完成,耗时{}毫秒", interval);
}
} catch (Exception e) {
log.error("过滤器错误:", e);
setReturnInfo(response, JSONUtil.toJsonStr(R.failed(Objects.isNull(e.getCause()) ? e.getMessage() : e.getCause().getMessage())));
} finally {
//移除日志ID
MDC.remove(LogHandler.TRACE_ID);
}
}
4、 事务处理
多个数据list 进行了 一个事务,前台无法查看部分数据,只有等方法完成了,才能看到数据,改造为,list 里面是单个方法和事物,插入数据库,保证是最新数据和执行完的数据。
5、Android 添加新年感觉
给rouyi-android 添加了仿照支付宝底部样式方法,也可以进行了动态体会图片了,过年的时候用过年的主题图片了。
这个可以同接口进行操作和控制。
6、sentinel 实践
环境搭建下载并启动
启动nobup java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar > sentinel.log 2>&1 &
java 代码里面处理,
几种模式里面,只有这种目前还附和自己业务,限流的对象,就是接口里面设置
@SentinelResource(value = “select”, blockHandler = “exceptionHandler”)
exceptionHandler就限流要走的方法。
在sentinel 里面进行配置限制
里面东西很多,发现自己掌握的只是皮毛而已。
参考
https://zhuanlan.zhihu.com/p/678831923
https://blog.youkuaiyun.com/FL63Zv9Zou86950w/article/details/114253541
学习时间:
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点
学习产出:
- 优快云 技术博客 1 篇