谷粒商城学习笔记

 runnable也是可以有返回值的,但是要传入一个对象

线程池一般只有一两个。

execute和submit都可以提交任务

线程池可以避免资源耗尽的问题。

 线程池的七大参数和工作原理

 

核心线程用完了,再把任务放到阻塞队列里面。阻塞队列也满了,再继续增加新线程,但是不超过最大线程数量,最大线程数也满了,就使用拒绝策略。max里面的任务执行完了以后,经过一定时间,释放线程,但是核心线程core是不释放的。

 

 异步的好处

先带着sku的id查相关信息,把前三个任务完成,

再根据sku的基本信息,查到对应spu,做任务4,5,6

运行一个异步任务,提交到创建的线程池,返回一个CompletableFuture<T>对象

CompletableFuture<Void> future = CompletableFuture.runAsync( () -> {

xxxxxxxx;

},executor );

这是一个函数式接口,有返回值 

有返回值的异步任务,supplyAsync方法 

使用whenComplete。

 在后面继续.exceptionally(throwable ->{

return 10;

},可以感知异常,并且返回自己设定的默认值。

用handle()方法处理异步的返回。

线程的串行化:

thenRun是用之前的旧线程继续执行,thenRunAsync()是开启一个新的线程异步执行。

这个没法感知到上一步的执行结果 。

 

 

 

弄清楚三个的区别。

 

注意CompletableFuture.allOf()和CompletableFuture.anyOf()的区别,allOf是没有返回值的,需要从任务中get,anyOf是有返回值的。

配置页面跳转 

XShell连接上虚拟机,配置nginx 

cd/mydata/nginx/conf/

cd conf.d/

vi gulimall.conf

再配置网关

把详情页的文件复制到商品服务的resource里面

把静态的文件夹上传到nginx上

修改检索服务的list.html

 

展示sku的页面信息 

获取路径中的变量用@PathVariable("skuId")

封装一个skuItemVo,包含了页面需要的所有信息。

 在接口中创建出需要的方法,并在实现类中实现方法。

封装这几个信息 

 

有嵌套属性的话需要封装自定义结果集 

查找出来以后通过model展示页面 

中间跳过了几集前端的

通过线程池和ComplatableFuture进行异步编排优化

整体架构图

认证中心集成多个功能 ,创建认证服务模块

注意看,文件夹是放到nginx里面,而.html文件是放到resource的template文件夹里 

放在虚拟机的mydata/nginx/html/static目录下面

配置网关路由到指定的地址 

登陆页面是可以直接访问到,但是reg.html注册页面不可以,因为只有index.html是mvc

绑定单击事件

这个一配置就可以不用写前面那个control了

短信验证码功能:购买阿里云短信接口 

请求头里添加个key,之前那些都是在params里面 

配置prefix 

 

 配置yaml文件的host,path等

 验证码的检验以及防止60秒内多次刷新发送

 把页面错误都放到model里面

 

收集到了错误 

 看debug界面

注意左下角的放行按钮 

路径映射默认是get,所以请求转发会产生错误 

 重定向,把model改成redirectAttributes

利用的是session原理 ,跳到下一个页面取出数据后,会把session里的数据删除掉。

 验证验证码是否正确,通过和redis里存放的值进行比较,这就是一种令牌机制

 微服务之间传的是jason数据,所以得RequestBody

 注意看,这个this.baseMapper其实就是MemberDao

创建查找默认会员等级的sql语句,写在相应的Dao.xml文件里面

 

 注意看,这里调用的是刚创建出来的实现类自己的方法

 编写异常类,继承runtimeException,使得校验没通过的话不用返回值,直接抛异常。

 

在方法中throw异常。 

 注意看querywrapper的使用,这个selectCount方法其实是BaseMapper自带的

这个异常的话,先是抛给regist方法,然后再抛给上层的controller 

 下面内容是密码加密的内容,p217

 是一个信息摘要算法,严格来说不是加密算法。只要内容不变,计算出的值就不变,并且md5算出的值是不可逆的。

 如图获取md5加密的值

将明文和密文进行匹配 

 如上图,将密码进行加密存储

 在枚举类中保存相应的异常信息

还是刚才的regist方法,根据不同的异常类型,返回不同的结果。注册功能就写好了,但是在注册页面点击注册,是发给auth服务的 ,所以在auth服务中创建feign类,在loginController中调用刚才写的功能,如下图。

 如上图member服务已经注册到了nacos中

如上图,验证注册功能,当确认输入的验证码和存在redis里的验证码(有过期时间)一致的时候,直接删除redis里存的。

 所有注册页和登录页的前置地址,一定要加上自己的域名,要不然静态资源不能过nginx嘛,就访问不到了。

写一个vo用来收集登陆页面输入的用户名和密码。

 

完成会员服务里的登录功能 

 注意了,远程调用功能要把全路径都写上

 如上图,在auth服务中调用远程服务,完成功能

下面是auth2.0社交登录还有单点登录的功能,新开一个帖子记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值