12-2107课上问题分析及总结
Posted 雨田说码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12-2107课上问题分析及总结相关的知识,希望对你有一定的参考价值。
文章目录
Day01~微服务架构入门
核心知识点
- 微服务架构诞生的背景(分而治之~北京一个火车站到多个火车站)
- 微服务架构解决方案(大厂自研,Spring Cloud ~Netflix,Alibaba,…)
- 微服务架构下Maven项目的创建方式?(Maven聚合项目~资源复用,简化编译,打包,部署方式)
- 微服务架构入门聚合项目创建?(01-sca,sca-consumer,sca-provider,sca-gateway,sca-common)
常见问题分析
- 为什么需要微服务?(对系统分而治,解决因并发访问过大带来的系统复杂性(例如:业务,开发,测试,升级,可靠性等)
- 微服务设计的特点?(单一职责,独立进程,开发测试效率高,可靠性高,升级难度小,但会带来一定的维护成本)
- 微服务解决方案有哪些?(大厂自研,中小企业采用开源Spring Cloud Alibaba,Spring Cloud Netfix等 )
- 微服务设计中需要哪些关键组件(服务的注册,发现,配置,限流降级,访问入口管理,分布式事务管理等)
- 创建聚合工程的目的?(实现工程之间资源的的共享)
- 如何修改聚合工程中项目的编译和运行版本?(build->plugins->plugin->maven-compiler-plugin)
- maven工程中build元素的作用?(定义项目的编译,打包方式)
- maven父工程的packaging元素内的值是什么?(pom)
- maven父工程中dependencyManagement元素的作用是什么?(定义项目的版本)
常见Bug分析
- 依赖或插件无法下载或加载?(本地库冲突,网络不好,maven镜像配置,指定版本在远程服务器不存在,清idea缓存后重启)
- 项目的pom.xml文件有删除线?(idea/setting/build,Execution,Deployment/build Tools/maven/ignore Files)
课后作业
- 基于原有工程结构,在01-sca工程下创建sca-common工程.
- 在sca-provider工程中引入sca-common工程依赖.
- 在sca-provider工程中使用sca-common工程中的一些公共类(例如StringUtils.java)
- 检查自己电脑环境是否配置了JAVA_HOME环境变量?(set JAVA_HOME)
- 检查自己电脑环境中的JVM虚拟机是否为64位的?(java -version)
- 检查自己电脑环境中mysql的版本是否为5.7以上?(假如是MariaDB ,建议10.5以上)
- 预习Nacos服务注册中心相关内容.
作业答案
- sca-common 工程创建,例如:
- sca-provider 工程引入sca-common工程依赖
<dependencies>
<!--引用sca-common工程中的资源-->
<dependency>
<groupId>com.jt</groupId>
<artifactId>sca-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
- sca-provider工程中使用sca-common工程公共类StringUtils.java
第一步:在sca-common工程中创建StringUtil.java工具类,例如:
package com.jt.common.util;
/**
* 自己定义一个操作字符串的工具类
*/
public class StringUtils {
/**
* 判断字符串的值是否为空
* @param str 这个参数就是你要验证的字符串
* @return true表示空
*/
public static boolean isEmpty(String str){
return str==null||"".equals(str);
}
}
第二步:在sca-provider工程中添加spring-boot-start依赖,例如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
第三步:在sca-provider工程中的test目录下定义单元测试类,并进行测试,例如:
package com.example;
import com.jt.common.util.StringUtils;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
/**
* @SpringBootTest 注解描述的类为Spring工程的单元测试类
*/
@SpringBootConfiguration //(假如工程中有启动类,注解就不需要加了)
@SpringBootTest
public class StringTests {
/**
* 在当前测试类方法中,使用了sca-common项目中的StringUtils工具类
*/
@Test
void testStringEmpty(){
String content="helloworld";
boolean flag= StringUtils.isEmpty(content);
System.out.println(flag);
}
}
-
检查自己电脑的JAVA_HOME环境变量?
方式1:打开电脑的命令行窗口,输入set JAVA_HOME 指令,例如:
方式2:假如是window平台还可以通过,如下方式进行检查,例如:
-
检查自己电脑环境中的JVM虚拟机是否为64位的,例如:
-
登录mysq,检查mysql或maridb的版本,例如:
Day02~Nacos 注册中心入门
核心知识点
- 注册中心诞生的背景? (所有公司需要在工商局进行备案)
- 注册中心的选型?(社区活跃度,稳定性,功能,性能,学习成本)
- Nacos下载,安装,配置,启动,访问(http://ip:port/nacos)
- 服务向Nacos的注册?(添加依赖,服务配置,启动服务并检查)
- Nacos进行服务监控的方式?(心跳包)
- 服务(进程)之间的调用?(借助RestTemplate.思考Spring中的JdbcTemplate,SqlSessionTemplate等对象的作用)
常见问题分析
- 注册中心诞生的背景? (服务多了,需要对服务进行更好管理)
- 市场上常用的注册中心?(Zookeeper,Eureka,Nacos,Consul)
- 如何对注册中心进行选型?(社区活跃度,稳定性,功能,性能,学习成本)
- Nacos 是什么?(是Alibaba公司基于SpringBoo技术t实现的一个注册中心,本质上也是一个服务)
- Nacos 的基本架构?(Client/Server架构)
- Nacos 主要提供了什么核心功能?(服务的注册,发现,配置)
- Nacos 服务启动需要什么前置条件?(配置JDK的JAVA_HOME目录,安装MySQL5.7以上版本,配置连接的数据库)
- Nacos 服务单机模式,window平台下启动时的指令是什么?(startup.cmd -m standalone)
- 实现Nacos服务注册需要添加什么依赖?(两个)
- 实现Nacos服务注册时,必须做哪些配置?(服务名,假如是本机服务注册可以省略服务地址)
- Nacos如何检查服务状态?(通过心跳包实现)
- 服务之间进行服务调用时,使用了什么API?(RestTemplate)
常见Bug分析
-
JAVA_HOME环境变量定义错误,例如:
说明,这里一定要注意JAVA_HOME单词的拼写,JAVA_HOME中定义的JDK是存在的. -
MySQL版本比较低,例如:
当执行nacos-mysql.sql文件时,出现如下错误:
-
SQL文件应用错误,例如:
-
Nacos的application.properties配置文件中,连接数据库的配置错误.
-
服务注册时,服务名不正确,例如:
-
Nacos 服务注册失败,例如
-
客户端500异常,例如
-
服务调用时,连接异常,例如:
-
服务调用时底层404问题,例如:
课后作业
- 重新创建新的聚合项目(例如10-sca)
- 重新实现服务的注册和调用(ca-consumer调用ca-provider)
- 尝试完成负载均衡方式的服务调用(参考博客文档)
Day03~服务发现及调用
核心知识点
- 基于LoadBalancerClient 实现服务发现和负载均衡
- @Loadbalanced注解的作用以及应用分析
- Feign方式的服务调用实践
常见问题分析
- 何为服务发现?(从nacos获取服务实例)
- LoadBalancerClient的作用?(从nacos获取服务实例列表,然后本地基于负载均衡算法获取服务实例)
- @Loadbalanced作用?(描述RestTemplate对象,让系统底层为RestTemplate对象赋能)
- Feign是什么?(Spring Cloud微服务规范中的一组远程调用API)
- 为什么使用Feign?(优化服务调用结构)
- 如何使用Feign实现服务调用?(依赖,@EnableFeignClients,@FeignClient)
常见Bug分析
- 服务启动时端口被占用,例如:
课后作业
以上是关于12-2107课上问题分析及总结的主要内容,如果未能解决你的问题,请参考以下文章