SpringCloud实现外卖订餐系统(初体验)

写在前面:

本文章属于本人自学记录,原代码和项目结构框架图来源于b站up主《楠哥教你学java》

需求分析:

项目主要分为两个部分:客户端和后台管理系统
具体实现功能如下图:


image.png
关于微服务的简单介绍:

所谓微服务架构:就是一种架构思想,强调服务个体的独立性,每个服务运行于独立的进程并采取轻量级的交互。并且通过各个小服务组成一种应用。
这样做的好处有:服务独立、扩展性好、可靠性强。
但也有相应的缺点:运维复杂性、分布式复杂性、监控复杂性。

本项目的微服务架构:

4个服务提供者:
account提供账户服务:⽤户和管理的登录退出。
order提供订单服务:添加订单、查询订单、删除订单、处理订单。
user提供⽤户服务:添加⽤户、查询⽤户、删除⽤户。
menu提供菜品服务:添加菜品、删除菜品、修改菜品、查询菜品。

1个服务消费者:调⽤以上四个服务提供者,服务消费者包含了客户端的前端⻚⾯和后台接⼝、后台管理系统的前端⻚⾯和后台接⼝。⽤户 / 管理员直接访问的资源都保存在服务消费者中,服务消费者根据具体的需求调⽤四个服务提供者的业务逻辑,通过 Feign 实现负载均衡。

Q:什么是负载均衡? A:负载均衡就是以廉价有效的方式扩展网络设备和服务器带宽,加强网络处理能力,提高网络灵活性和可用性的一种技术。

微服务架构如下图:

image.png

项目具体实现流程:

运行环境:
操作系统:windows10
编译器:Idea
JDK:13

1、打开Idea,创建Maven工程


image.png

2、创建父工程,pom.xml


image.png

注意箭头所指代码,记得添加相关路径<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!)


image.png

4、在新的Module中的pom.xml中配置注册中心


image.png

5、在eurekaserver的resources中新建文档application.yml并进行配置


image.png

6、创建启动类(在eurekaserver的包里面创建)


image.png

试运行结果:


image.png

查阅资料:
image.png

检查发现原来是application.yml的位置导错了,写在了父包里面。应该修改到eurekaserver包的resources的路径下:


image.png

并且EurekaserverApplication写成了EnableEurekaserver了:
image.png

发现拼写错误
image.png
但是这些都不是错误的核心问题,
问题所在是:springCloud与SpringBoot版本不兼容
image.png

修改后,再次运行,成功出结果,成功出现页面:


image.png

7、再次新建一个Module并配置中心


image.png

8、同时再次在新的Module中配置application.yml
image.png

9、在 shared 路径下创建各个微服务对应的配置⽂件


image.png

10、创建启动类ConfigServerApplication
image.png

11、同理创建order服务模块并配置bootstrap.yml和启动类OrderApplication
image.png

12、在order包中创建Controller控制层并新建一个OrderHandler类

image.png

13、尝试运行启动类OrderApplication


image.png

查找资料得知:产生错误的原因是springcloud的其他服务读取不了配置中心得配置文件出错,服务没有读取到git上的配置文件导致。
检查到时bootstrap.yml中配置错误,修改后又出现新的bug


image.png

查找资料得知:问题产生的原因很有可能是由于有多个properties文件造成的,如果再第一个properties文件中没有找,就不认为没有了,不继续找下一个properties文件。
placeholer的汉语,是占位符的意思,这个值是在application.yml文件里面取值,可能是配置文件字符写的不对。配置文件里面port 具体值之间少了一个空格,导致解析文件时,获取不到server.port这个属性值。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容