5月份最新总结

学习目标:

  • kafka数据数据挤压
  • tidb学习
  • logback + TraceId 配合使用
  • 事务处理
  • Android 添加新年感觉
  • sentinel 实践

学习内容:

  1. kafka
    kafka 中最近也是老是出现问题,小白用很多参数不是很了解,推过来数据,异常处理的时候,会造成数据挤压部分,最新生产上就出现了20多万的消费无法消费问题,要么等着让他消费掉
    看到这个视频
    https://www.bilibili.com/video/BV1gm4y1w7tN/
    让我觉得顺序应该没有问题,异常表处理不足,重新发送等处理一些,但是大神视频里面解决方法还是不错的,大把抓反而解决了,到现在还不知道当时是怎么解决的。哎,一个苦战的小白。

  2. 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.csdn.net/FL63Zv9Zou86950w/article/details/114253541


学习时间:

  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习产出:

  • CSDN 技术博客 1 篇
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值