今日练习

简介: 本作业涵盖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一样追加,参照下图

相关文章
|
1月前
|
搜索推荐 BI
新一代云HIS系统源码,采用多租户云架构,支持区域医疗机构共享部署
新一代云HIS系统采用多租户云架构,支持区域医疗机构共享部署,显著降低建设成本、缩短实施周期、便于统一维护。系统涵盖结构化EMR、门诊/住院全流程管理(挂号、收费、医嘱、护理、药房、检查检验等),集成医保结算与智能报表,全面满足基层医院运营需求。
168 2
|
移动开发 资源调度 JavaScript
Vue 3.0 && Nginx 项目打包部署知识都在这了~
Vue 3.0 && Nginx 项目打包部署知识都在这了~
8181 1
Vue 3.0 && Nginx 项目打包部署知识都在这了~
|
3月前
|
JSON 人工智能 自然语言处理
[大模型实战 05] 大模型实战的杀手锏: 模型微调
本文通过Kaggle实操对比Base与Instruct模型,图解大模型预训练→指令微调→人类对齐三阶段演进,并厘清Prompt工程、RAG(注知识)与微调(塑性格)的技术边界与选型策略,助你科学决策模型优化路径。
|
5月前
|
canal 消息中间件 关系型数据库
配置数据同步环境
配置Canal+RabbitMQ实现MySQL数据同步,通过开启Binlog行模式、创建专用用户并授权,部署Canal监听指定表变更,将数据实时发送至RabbitMQ指定队列,确保hm-item库中item_sync表的增删改操作同步至消息队列,支持后续数据消费与处理。
|
5月前
|
JSON Dubbo Java
Feign远程调用
本章介绍如何使用Feign替代RestTemplate实现更优雅的HTTP跨服务调用。通过引入Feign,结合注册中心与注解声明,解决硬编码、可读性差等问题,并支持自定义配置、连接池优化与最佳实践,如客户端抽取为独立模块,提升代码复用性与维护性。
|
5月前
|
消息中间件 Java 数据安全/隐私保护
RabbitMQ集群部署
本文介绍RabbitMQ集群部署与高可用方案,涵盖普通集群搭建、Erlang Cookie配置、节点发现机制及安全设置。通过静态配置实现三节点集群,并详解镜像模式(exactly、all、nodes)提升高可用性,避免单点故障。同时引入3.8版本后的仲裁队列,简化配置,实现数据冗余与自动主从切换,保障消息服务的稳定性与可靠性。
|
5月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
MyBatisPlus是基于MyBatis的增强ORM框架,简化单表增删改查操作。通过继承BaseMapper即可实现CRUD,支持注解映射与全局配置,提供QueryWrapper、UpdateWrapper等条件构造器,灵活构建查询条件,并可结合自定义SQL满足复杂业务需求,大幅提升开发效率。
|
5月前
|
容灾 关系型数据库 Nacos
Seata的部署和集成
本文介绍Seata分布式事务框架的部署与微服务集成全流程。包含TC服务搭建、Nacos配置中心对接、数据库表初始化、微服务整合Seata及高可用集群部署,并实现通过Nacos动态管理事务组映射,支持异地容灾与集群切换。
|
5月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是Spring推出的微服务一站式解决方案,弥补了各技术分散、缺乏统一标准的痛点。它具备“约定优于配置”、组件丰富、开箱即用等特点,完美适配云原生架构。版本以地铁站命名(如Hoxton.SR12),避免与子项目版本冲突。其子项目涵盖服务注册、配置管理、负载均衡等全链路能力。随着Netflix套件停更,Spring Cloud Alibaba凭借Nacos、Sentinel、Seata等成熟组件成为主流选择,获官方认可,功能更完善,经大规模业务验证,成为微服务落地优选方案。
|
9月前
|
机器学习/深度学习 人工智能 安全
AI 生成的代码可信吗?
AI 编码工具如 GitHub Copilot 正在改变软件开发方式,能根据输入内容自动补全代码,提高效率。然而,AI 生成的代码常存在漏洞,安全性问题突出。研究显示,其生成代码约 40% 含安全缺陷。尽管如此,开发者仍看好其潜力,认为结合代码审查工具与持续优化,AI 将推动编程方式革新。

热门文章

最新文章