今日练习

简介: 本作业涵盖Nacos配置中心、Feign远程调用与Gateway网关三大核心实践。通过配置热更新、服务解耦与接口鉴权,提升微服务架构的可维护性与安全性,并强化代码优化与自测能力。

作业目标
作业一:掌握Nacos配置中心的使用,巩固强化代码编写能力(整合配置中心2、需求2)
作业二:掌握Feign实现远程服务调用,针对自己负责的模块能说出主动优化经验(便于后续面试)
作业三:掌握微服务网关的搭建、使用,巩固强化对于后端接口自测的能力(postman测试6个接口,次数预计20次左右)
工程介绍
工程技术架构图
工程目录结构图
环境准备
导入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一样追加,参照下图

相关文章
|
编解码 移动开发 流计算
【开源视频联动物联网平台】流媒体传输协议HLS,FLV的功能和特点
【开源视频联动物联网平台】流媒体传输协议HLS,FLV的功能和特点
516 2
|
2月前
|
JSON Dubbo Java
Feign远程调用
本章介绍如何使用Feign替代RestTemplate实现更优雅的HTTP跨服务调用。通过引入Feign,结合注册中心与注解声明,解决硬编码、可读性差等问题,并支持自定义配置、连接池优化与最佳实践,如客户端抽取为独立模块,提升代码复用性与维护性。
|
人工智能 搜索推荐 数据可视化
《解锁Napkin:AI图表个性化编辑的宝藏工具》
Napkin是一款强大的AI图表工具,专注于个性化编辑。它提供丰富的颜色、字体选择,支持动态元素和层级结构调整,使图表清晰且具吸引力。用户可添加丰富图标,与文本完美融合,增强表现力。Napkin还支持多格式导出,确保图表在不同场景下完美呈现。无论是科技报告还是儿童教育图表,Napkin都能让你的数据展示脱颖而出。
602 13
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
360 5
linux系统服务二!
|
JavaScript 测试技术 持续交付
构建高效的开发环境:工具与实践指南
在软件开发中,高效的开发环境对于提升生产力和代码质量至关重要。本文将介绍如何通过选择合适的工具和实践来打造高效环境,包括减少干扰、提高效率和提升代码质量。首先,文章将探讨选择正确的代码编辑器,如 Visual Studio Code 和 Sublime Text,并介绍如何配置编辑器以提高工作效率。接着,文章将讲解版本控制系统的使用,特别是 Git 的基本操作及 GitHub、GitLab 等远程仓库服务的选择。此外,还将讨论代码质量管理,包括代码审查和单元测试的最佳实践。最后,文章将介绍持续集成和持续部署(CI/CD)工具,以及如何利用命令行工具和协作工具来进一步提升开发效率。
|
开发框架 开发者 UED
ArkUI常用布局:构建响应式和高效的用户界面
本文详细介绍了HarmonyOS应用开发中ArkUI框架的常用布局方式,包括线性布局、层叠布局、弹性布局、相对布局、栅格布局、列表和轮播布局。每种布局方式都配有示例代码,帮助开发者构建响应式和高效的用户界面。通过合理选择和使用这些布局,可以显著提升应用的性能和用户体验。
624 0
|
网络协议 安全 网络安全
网络术语、接口和协议简介
网络术语、接口和协议简介
463 1
|
传感器 人工智能 算法
AI技术在智慧城市建设中的应用与前景
传统的城市规划和管理面临诸多挑战,如交通拥堵、资源浪费、环境污染等。随着人工智能技术的发展,其在智慧城市建设中的应用成为解决这些问题的关键。本文将探讨AI技术在智慧城市建设中的应用现状与前景,从智能交通管理、智能能源利用、智慧环境监测等方面进行分析,展望AI技术为智慧城市带来的巨大潜力与发展方向。
607 27
|
Kubernetes 容器 Perl
在K8S中,镜像拉取策略有哪些?
在K8S中,镜像拉取策略有哪些?
|
前端开发 JavaScript
在JavaScript中,回调函数、Promise和async/await这三种异步处理机制的优缺点
JavaScript的异步处理包括回调函数、Promise和async/await。回调函数简单易懂,但可能导致回调地狱和错误处理困难。Promise通过链式调用改善了这一情况,但仍有回调函数需求和学习成本。async/await提供同步风格代码,增强可读性和错误处理,但需ES8支持,不适用于并发执行。根据项目需求选择合适机制。

热门文章

最新文章