工程介绍

简介: 本课程围绕微服务架构展开,涵盖Nacos配置中心、Feign远程调用及Gateway网关实践。通过doctor-station项目实战,完成配置热更新、开单限流、维护时间控制,实现服务解耦与请求路由,提升系统可维护性与安全性。(238字)

工程技术架构图
工程目录结构图
环境准备
导入SpringCloud-Day2原始作业的工程:doctor-station(
doctor-station.zip
(40 KB)

导入数据库脚本:创建数据库:doctor_station,导入脚本:
doctor_station.sql
(2 KB)
启动nacos、doctor-station工程:
导入postman文件:
SpringCloud-Day1.json
(1 KB)
,使用postman完成下述请求
应用名称
访问地址
预期结果
inventory-service
更新库存
{ "updateResult": true,"updateMsg": "更新成功"}
doctor-service
创建医嘱
{"createResult": true,"createMsg": "创建成功"}
题目一
目标
能够完成微服务Nacos配置中心的使用
需求
随着需求的不断迭代更新,应用开始有越来越多的配置项,尤其部分配置项可能频繁修改。此时考虑引入一个配置中心来解决当前业务与配置耦合的问题,请结合你当前掌握的知识点,思考如下场景问题应该如何解决?
需求项
业务描述
调用库存中心服务地址优化
接口地址随着需求的迭代,可能会不定期产生变化,因此考虑放在配置中心
预期:test环境从配置中心获取请求地址(需热更新),并优化原有代码(请考虑这种配置是每个环境都存一下,还是放在共享配置中)
[耗材中心]维护时间场景优化
耗材中心定期做统一数据迁移,此时应用将停机维护,本次dev环境将于:2023年10月1日23:59 至 10月2日02:00进行升级维护,请完成相关配置项,并在代码中做配置项的校验:更新时间之内返回异常信息(系统维护中,请稍后重试)
[医生站]开单次数场景优化
医生站作为端侧应用,为避免部分医生刷单给自己刷绩效,针对当前test环境增加一个:当天最多允许创建5单医嘱数据的配置项,请完成相关配置项,并思考:如何做到当天最多5单的逻辑,并在超过n但之后给出异常信息(今日开单次数已达上限)
提示
结合今天学习内容,完成两个module的nacos配置中心依赖导入、整合
日志:需创建各自应用的配置文件,同时test环境的配置覆盖共享文件配置
维护时间:与今天课程内容基本吻合,结合今天学习内容整合即可
创建权限:是否考虑到了新增一个查询当天单数的SQL呢?
参考答案
1.整合nacos-config
依赖引入(每个微服务)
2.接口请求地址需求
nacos创建配置文件:doctorservice-test.yaml、doctorservice.yaml,避免为空报错可以先写个1

doctor-service创建配置文件:bootstrap.yml文件,并整合配置文件
配置文件新增接口地址配置信息
doctorservice-test.yaml,这里配置项的K-V可以自定义
注意:配置项的换行后缩进,不要使用TAB,否则会有下述错误

属性读取
新建配置读取类:InventoryServerConfig
在DoctorService中读取配置并替换代码
重启服务验证(postman调用创建医嘱,成功即可)
3.耗材中心维护时间
nacos创建配置文件:inventoryservice-dev.yaml,避免为空报错可以先写个1
inventory-service创建配置文件:bootstrap.yml文件,并整合配置文件
配置文件新增接口地址配置信息
inventoryservice-dev.yaml,这里配置项的K-V可以自定义
属性读取,代码优化
新建配置读取类:InventoryServerConfig
在InventoryService中读取配置并优化代码
调整nacos配置,以保证规则分别命中以下两种场景
成功
失败

4.医生开单次数
配置项增加,K-V可以自定义
增加配置类与属性
DoctorService 整体逻辑优化,增加查询当天创建医嘱的数量
注意:以上代码为做简洁化实现,部分细节还有优化空间
getEndOfDay、getStartOfDay应该放在专门DateUtil中
sql查询应该放在专门的mapper中,不应耦合在service核心逻辑层
createDoctorOrder方法整体开始变得越来越长,可以将步骤1/1-1/1-2 封装成一个函数
postman发起测试
注意:调整库存中心的nacos配置,让库存中心不在维护窗口,否则创建会失败
成功

失败

题目二
目标
掌握Feign实现远程服务调用,针对自己负责的模块能说出主动优化经验(便于后续面试)
需求
针对目前的工程调用,存在调用地址维护困难、代码可读性差等缺点,因此考虑剥离出一个单独的API-module,本次重构优化工作具体如下:
需求项
业务描述
重构工程,引入openfeign
完成doctor-service对inventory-service调用的代码重构
调整feign日志级别为全局BASIC
考虑到生产环境不会全量日志打印,请结合目前掌握技术项完成此技术改造
完成feign连接池优化
作为开发人员,主动发现、解决落地问题是必备职业素养,请完成此模块技术改造并说清楚改造的初衷、实现过程
提示
参照课程内容最佳实践,完成代码重构升级工作
参考答案
1.openfeign重构
doctor-service工程引入依赖
启动类增加注解:@EnableFeignClients
新建:feign-api模块,完成代码迁移、删除
feign-api引入依赖
迁移出参VO,并删除doctor-service中的文件、引入feign-api、更新对InventoryUpdateVO的import

新建跨服务调用client:InventoryClient
更新service层调用关系

解决包路径扫描问题
启动类追加注解中的属性:@EnableFeignClients(clients = {InventoryClient.class})
重启服务并测试验证
2.调整全局日志级别
配置文件新增:
或创建一个类,注册日志级别(参照今天课程内容),验证效果如下:
3.优化连接池
引入依赖
增加配置信息
重启验证
题目三
目标
掌握微服务网关的搭建、使用
需求
针对目前的系统工程,可以明显发现技术架构上缺少一个看门神,此问题会导致所有的请求直接打到了微服务中,对于服务本身的保护基本不存在(在微服务本身不做服务保护的前提下)。当一个微服务有多个实例时(水平复制)调用方也无法做到请求的路由,一系列问题导致我们考虑引入一个网关。完成下述需求:
需求项
业务描述
完成gateway工程搭建
创建gateway工程,并能够在nacos看到即可(此需求项暂不做微服务整合,勿混淆)
完成微服务整合gateway,并能够通过网关创建医嘱、更新库存
完成通过网关访问的权限校验
校验逻辑:key=auth,账户=admin放行,其余返回异常
提示
网关权限校验需实现自定义全局过滤器
参考答案
1.gateway工程搭建
创建gateway模块,并引入依赖
编写启动类:GateWayApplication
新增配置文件:application.yml,增加启动配置。此处只启动网关即可,因此不用配置gateway路由规则
启动后,nacos查看注册信息
2.整合gateway
增加网关的路由规则配置
重启服务验证
更新库存
创建医嘱
3.权限校验
网关增加鉴权代码
postman请求测试
更新库存原接口

更新库存新接口

创建医嘱新接口,注意:post请求不能跟GET一样追加,参照下图

相关文章
|
12天前
|
数据采集 人工智能 安全
|
7天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
344 164
|
6天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
345 155
|
7天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
580 4
|
15天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
1018 7