写在前面:
本文章属于本人自学记录,原代码和项目结构框架图来源于b站up主《楠哥教你学java》
需求分析:
项目主要分为两个部分:客户端和后台管理系统
具体实现功能如下图:
关于微服务的简单介绍:
所谓微服务架构:就是一种架构思想,强调服务个体的独立性,每个服务运行于独立的进程并采取轻量级的交互。并且通过各个小服务组成一种应用。
这样做的好处有:服务独立、扩展性好、可靠性强。
但也有相应的缺点:运维复杂性、分布式复杂性、监控复杂性。
本项目的微服务架构:
4个服务提供者:
account提供账户服务:⽤户和管理的登录退出。
order提供订单服务:添加订单、查询订单、删除订单、处理订单。
user提供⽤户服务:添加⽤户、查询⽤户、删除⽤户。
menu提供菜品服务:添加菜品、删除菜品、修改菜品、查询菜品。
1个服务消费者:调⽤以上四个服务提供者,服务消费者包含了客户端的前端⻚⾯和后台接⼝、后台管理系统的前端⻚⾯和后台接⼝。⽤户 / 管理员直接访问的资源都保存在服务消费者中,服务消费者根据具体的需求调⽤四个服务提供者的业务逻辑,通过 Feign 实现负载均衡。
Q:什么是负载均衡? A:负载均衡就是以廉价有效的方式扩展网络设备和服务器带宽,加强网络处理能力,提高网络灵活性和可用性的一种技术。
微服务架构如下图:
项目具体实现流程:
运行环境:
操作系统:windows10
编译器:Idea
JDK:13
1、打开Idea,创建Maven工程
2、创建父工程,pom.xml
注意箭头所指代码,记得添加相关路径<relativePath/>
相关依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3、新建一个Module,parent是刚才的项目(注意是Module!)
4、在新的Module中的pom.xml中配置注册中心
5、在eurekaserver的resources中新建文档application.yml并进行配置
6、创建启动类(在eurekaserver的包里面创建)
试运行结果:
查阅资料:
检查发现原来是application.yml的位置导错了,写在了父包里面。应该修改到eurekaserver包的resources的路径下:
并且EurekaserverApplication写成了EnableEurekaserver了:
发现拼写错误
但是这些都不是错误的核心问题,
问题所在是:springCloud与SpringBoot版本不兼容
修改后,再次运行,成功出结果,成功出现页面:
7、再次新建一个Module并配置中心
8、同时再次在新的Module中配置application.yml
9、在 shared 路径下创建各个微服务对应的配置⽂件
10、创建启动类ConfigServerApplication
11、同理创建order服务模块并配置bootstrap.yml和启动类OrderApplication
12、在order包中创建Controller控制层并新建一个OrderHandler类
13、尝试运行启动类OrderApplication
查找资料得知:产生错误的原因是springcloud的其他服务读取不了配置中心得配置文件出错,服务没有读取到git上的配置文件导致。
检查到时bootstrap.yml中配置错误,修改后又出现新的bug
查找资料得知:问题产生的原因很有可能是由于有多个properties文件造成的,如果再第一个properties文件中没有找,就不认为没有了,不继续找下一个properties文件。
placeholer的汉语,是占位符的意思,这个值是在application.yml文件里面取值,可能是配置文件字符写的不对。配置文件里面port 具体值之间少了一个空格,导致解析文件时,获取不到server.port这个属性值。