Spring Cloud 微服务项目实战
姚秋辰(姚半仙)
PayPal 研发经理
15861 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
结束语 (1讲)
Spring Cloud 微服务项目实战
15
15
1.0x
00:00/00:00
登录|注册

06 | 牛刀小试:如何搭建优惠券计算服务和用户服务?

你好,我是姚秋辰。
上一节课我们搭建了 coupon-template-serv 模块,实现了优惠券模板的创建和批量查询等功能,相信你已经对如何使用 Spring Boot 搭建应用驾轻就熟了。今天我们就来搭建优惠券平台项目的另外两个模块,coupon-calculation-serv(优惠计算服务)和 coupon-customer-serv(用户服务),组建一个完整的实战项目应用(middleware 模块将在 Spring Cloud 环节进行搭建)。
通过今天的课程,你可以巩固并加深 Spring Boot 的实操能力,为接下来 Spring Cloud 微服务化改造打好前置知识的基础,在这节课里我也会分享一些关于设计模式和数据冗余的经验之谈。
另外,这节课的源码都可以在Gitee 代码库中找到。你可不要只读爽文不动手敲代码,我建议你把代码下载到本地,对照着源码动手练习一遍,才能学为己用。
闲话少叙,我们根据优惠券项目的依赖关系,先从上游服务 coupon-calculation-serv 开始动手搭建吧。

搭建 coupon-calculation-serv

coupon-calculation-serv 提供了用于计算订单的优惠信息的接口,它是一个典型的“计算密集型”服务。所谓计算密集型服务一般具备下面的两个特征:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文是一篇关于搭建优惠券平台项目的实战经验分享,重点介绍了如何使用Spring Boot搭建优惠券平台的子模块,并详细讲解了优惠券计算逻辑的实现过程。作者通过具体的代码示例和技术原理讲解,帮助读者了解如何使用Spring Boot搭建应用,并加深对设计模式和数据冗余的理解。文章还提到了分层设计的思想,以及使用spring-data-jpa和spring-web搭建数据层和Controller层的过程。此外,文章还提出了思考题,引发读者对集群环境中应用互相发起调用的思考。总的来说,本文适合想要深入了解优惠券平台项目搭建的开发人员阅读,具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring Cloud 微服务项目实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(30)

  • 最新
  • 精选
  • gallifrey
    置顶
    @Override protected Long calculateNewPrice(Long totalAmount, Long shopAmount, Long quota) { // 计算使用优惠券之后的价格 Long newPrice = convertToDecimal(shopAmount * (quota.doubleValue()/100)); log.debug("original price={}, new price={}", totalAmount, newPrice); return newPrice; } 作者看一下这个DiscountTemplate类的实现逻辑有问题,newPrice只是该商户的折扣完的价格,总价是totalAmount - shopAmount + newPrice ; 不知理解是否正确

    作者回复: 还真是,我这数学就是体育老师都教不出来!想当年做营销中心的时候就搞出了个全店5折的bug。同学你算数一定是正经老师教的,思路清晰理解到位。 话说极客的评论置顶功能怎么玩,编辑大大,帮我把这条置顶。要让童鞋们看看,小学数学基础对以后写代码的指导意义有多大。一个程序员的一生,就是和bug抗争的一生,没有搞过几个P0 bug就像没挂过科一样,这个人生是不完整的。 我作为程序员的人生特别的完整。看了这个评论的同学们,你想自己家孩子也搞几个P0被3.25年终奖泡汤吗?不你不想,那就从我做起,赶紧的给娃的私教奥数补习班报起来

    2021-12-27
    6
    14
  • Geek_a6bab1
    老师您好,请教一个问题。我现在有一个比较久的springboot项目,需要升级到cloud项目,每个服务对应了一个数据库。现在碰到的问题是,把用户表拆出来以后,再别的服务就不能通过join去关联用户信息了。对于该问题一般在分布式项目中是怎么处理的?

    作者回复: 在业务里将join用户表的操作替换成通过后台api调用,获取用户服务信息。不过用户是基础数据,查询量比较巨大,实践里最好做一层数据异构,比如上一些主搜服务挡在DB前面。我打一个比方,就像做商品中心,如果商品表以前都是join获取商品数据,现在微服务化之后就把商品数据异构到了opensearch(根据自己公司技术栈选择主搜中间件选型),然后让业务方接入open search,对时效性要求很高的服务才通过对外暴露api做表查询

    2021-12-28
    2
    10
  • Layne
    回答下思考题: 1.利用注册中心的方式; 2.利用API网关的方式; 3.利用类似nginx这种做VIP的负载均衡方式。

    作者回复: 非常不错,使用nginx、keepalive做vip是挺常用的方案,省钱又简单

    2021-12-24
    10
  • peter
    请教两个问题:问题1:jpa本身不是具体的ORM框架,而是对ORM框架的一个封装,对吗?问题2:jpa只能用hibernate吗?能用mybatis吗?

    作者回复: orm可以理解为一个“理念”或者“口号”,在关系型DB和对象之间构建一层映射。jpa是一种“ORM规范”,它没有实现ORM,只是定义了一组持久化API的规范,我在项目中用的spring官方推荐的spring-data-jpa(底层hibernate实现)才是jpa规范的具体实现,像openjpa、toplink这些都是jpa的实现。mybatis你可以理解为半自动或者手动挡的ORM框架,它本身并不是jpa的实现,你可以了解一下mybatis-plus,比mybatis好用一些。

    2021-12-24
    6
  • 找工作
    姚老师在讲主线的时候穿插了很多干货,以前看了很多次设计模式,但是就连最简单的工厂模式是啥都没记住。姚老师一句:工厂方法会将子类转为顶层接口返回。直接道出了核心!

    作者回复: 设计模式最大的用处,就是在面试环节哇咔咔! 要是评选最滥竽充数的设计模式,我推选facade

    2022-03-11
    2
    5
  • 杨逸林
    老师怎么不用 Spring MVC 自带的记录请求体打印的内容来打印 @RequestBody 修饰的内容呢?这样一个个写 log.info JSON.toJSONString不累吗。 ```java @Bean public CommonsRequestLoggingFilter logFilter() { CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); filter.setIncludeQueryString(true); filter.setIncludePayload(true); filter.setMaxPayloadLength(10000); filter.setIncludeHeaders(false); filter.setAfterMessagePrefix("REQUEST DATA : "); return filter; } ``` application.yml ```yml logging: level: org: springframework: web: filter: # 打开请求体的日志 CommonsRequestLoggingFilter: debug ``` 或者在 logback 里面配置也是一样的。 这样就能看到请求体里面的内容了,它最终会转成 CacheXXWrapper,从已缓存的内容里面读。

    作者回复: 后面我们会转成使用openfeign来发起远程调用,feign组件有一个同样的功能课程里会讲到

    2022-01-06
    4
  • 大明猩
    看了老师写的代码,感觉自己这几年白学了,写不出来这么好的代码啊!

    作者回复: 这个托是专业的!

    2022-01-14
    3
  • martin
    老师,请教一个问题,AbstractRuleTemplate 已经实现了 RuleTemplate 接口,为什么 MoneyOffTemplate 还要重复写 implements RuleTemplate 呢? public abstract class AbstractRuleTemplate implements RuleTemplate {} public class MoneyOffTemplate extends AbstractRuleTemplate implements RuleTemplate {}

    作者回复: 啊哈,我抄作业的时候顺带拿过来了,同学很细心,这段可以去掉

    2021-12-30
    3
    3
  • 6点无痛早起学习的和尚
    有一个问题,目前已经 1 年半的 Java 业务开发经验,看源码的时候,需要跟着动手写吗?还是看源码梳理业务逻辑不用跟着动手写。 如果要跟着动手写,那是不是主要写业务逻辑处理部分,实体类这些就没有必要去重复写了,直接 cv?

    作者回复: 一年半已经是中忍级别了,实体类啥的就直接copy过来吧,么的问题的

    2021-12-28
    2
    3
  • kimoti
    修炼外功就是写业务逻辑代码,修炼内功就是算法,计算机底层原理,操作系统……

    作者回复: 每到面试的时候,内功心法都会大幅提升

    2021-12-24
    3
收起评论
显示
设置
留言
30
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部