开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):统计分析-生成统计数据接口(2)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11505
统计分析-生成统计数据接口(2)
目录:
一、实现功能
二、测试结果
三、解答问题
一,实现功能
把过程通过远程调用得到某天的注册人数,把人数最终加到我们的数据库中。
实现该功能:
做添加时,直接调用 baseMapper.insert(StatisticsDaily t) 方法,里面传对象即可。
先把对象 new 出来,然后向对象中给它设置进去值:
StatisticsDaily sta = new StatisticsDaily();
//new 该对象
sta.setRegisterNum();
//设置对象:注册人数,注册人数刚刚得到了,叫 countRegister
sta.setDateCalculated(day);
//是表中统计的日期,如查3月9号,里面就存3月9号,查3月1号,里面就存3月1号,是统计的日期,day 就是统计的日期
上面是两个值,还有其他值,以注册为例,其他值做数据的模拟,直接用随机数把几个值都设置:
//RandomUtils.nextInt(100,200); 随机数范围100到200,加入到每个值中随机生成值
sta.setVideoViewNum(RandomUtils.nextInt(100,200));
//视频播放数
sta.setLoginNum(RandomUtils.nextInt(100,200));
//登录数量
sta.setCourseNum(RandomUtils.nextInt(100,200));
//课程播放数量
baseMapper.insert(sta );
//最后把对象放到方法中,最终加到数据库中,功能完成,即统计某天的注册人数,根据天数去远程调用 UcenterClient。
然后把该数据得到,最终把它加到我们的数据库中。初步实现完成。
二,测试结果
最终试一下,看它最终结果怎样。
为了明显,在表里边先手动加几个记录,因为有记录,之后就查3月9号,1月1号,因为3月9号是两个值,3月1号是一个值。接口完成后,把两个服务启动,先用 swagger 测试,没有问题再找前端,把功能做上。
先检查,各部分都有,包括 nacos 配置都有,接下来启动,nacos 是醒状态,先把 UcenterApplication 启动,将该服务启动后再启动 sta 的统计服务,都启动用 swagger 做测试,等待启动后,找到 StaApplication 模块,也启动。等待它启动。
现在看 sta 用的端口号是8008,所以用8008的 swagger 做访问,测试该过程是否正确。均启动之后,把static统计表中数据先删除,重新添加,因为最终目的是表中多出一条数据。
打开 swagger:localhost:8008/swagger-ui.html ,打开之后找到/staservice/sta/registerCount/{day}方法,传入要查询的信息,如:查询日期:2020-03-09,因为它里边有数据,传入数据后,点击 Try it out! 看它返回的结果。
”message”:”成功”,返回成功。
表里默认没有值,刷新后看到数据添加成功。data_calculated:统计日期;register_num:生成人数;
login_num,video_view_num,course_num 是随机数,里面还有时间,可以加自动填充,这里不加了,各位把细节完善。
在 StatisticsDaily 中加入注解,tablebuilt,把时间也加上,现在值都有了,一个简单的功能完成。通过远程调用得到我们的注册人数,最终加到表中。
三,解答问题
问题:通过 statistics 模块调用 ucenter 模块得到操作,为什么过程要做个调用?数据直接查,做分析不可以吗,为什么还要做调的过程?即直接用 ucenter 查,做统计也可以做到,为什么要通过 spa 调该模块,存到表中才做统计?
解答:这么做也是实际工作中的场景,
举例:
(1)在实际的项目中,这种架构叫微服务模块,即每个服务由不同的团队做,如sta是你的组做的,ucenter 是另外的组做的,不同组之间是相互独立的。
实际中可以这样做:让 sta 去返一个数据库,ucenter 是另外的数据库。
每个服务访问不同的数据库。一个词叫做分库处理,比如我现在建个数据库,就叫鼓励 sta 专门做统计表。
然后另外一个库叫鼓励 ucenter 专门做用户表。在实际中一般是这样,因为咱是自己测试,所以是建立了一个数据库。但实际中不同模块不同数据库,现在的问题是 ucenter 只做用户,他跟统计无关,而统计不是由他这组做的,是由我们这组做的。但是我们还需要他的数据,那怎么做?
因为我们不可能去访问 ucenter 的数据库。没有权限,这就需要一个接口,做远程调用。
(2)有个项目叫北京移动话费管理平台呼叫中心系统,当时做的场景就是根据用户打过来的手机号,去查询该用户的姓名。用户手机号和姓名,也就是用户信息,它存在移动的数据库中。
公司没有权限去访问移动的数据库。把数据给公司让公司随便访问,是不可能的,用户信息可能泄露,那移动需要给我们开发一个接口,然后我们去调这个接口,根据手机号去查出手机号对应的姓名,然后再做操作。
这是一个实际流程,这些实际中将会来做一个接口提供数据,然后另外一个去调接口,得到信息,所以现在其实就是模拟这个过程。
用 sta 调 ucenter 得到数据,然后做统计,在实际中经常会有这种场景。
(3)每个人都有一个身份证,包括你的信息,而身份证信息是要存到国家公安部网站,比如现在我这边成立一个公司,我想做一个身份证系统,国家公安部网站数据库不可能对我这公司开放。
它可以给我开放一个接口,根据接口去调用身份证号信息,就是这样的流程。
现在是在服务间或者空调用。我们是用 spa 得到 ucenter 数据,然后把数据加到该模块的数据库中,最终做统计分析。这是一个比较符合实际的场景,在实际中一般都这么操作。