0
点赞
收藏
分享

微信扫一扫

springcloud:保姆式教程-从零搭建微服务(五)

千妈小语 2022-04-03 阅读 72

0. 引言

上一期我们介绍了nacos作为注册中心、配置中心的使用方法,如果对于gateway、nacos组件还不了解的可以看看往期文章:
springcloud:什么是分布式微服务,如何学习微服务(一)
springcloud:微服务涉及哪些技术、有哪些核心组件(二)
springcloud:网关组件gateway详解(三)
springcloud:注册中心、配置中心组件nacos详解(四)

本期我们将手把手搭建一个微服务项目,来加深大家对于微服务框架的理解

1. 项目简介

项目开始搭建之前,我们先要明确,项目包含哪些内容:
1、网关模块
2、订单服务、商品服务

然后配置将订单服务、商品服务注册到nacos上,网关从nacos中获取服务列表,并且转发请求到具体的服务上

注意:本项目默认你已经掌握springboot框架,mysql,mybatis-plus,所以涉及这些技术点不做专门讲解,如果未掌握的可以先学习后再来看本篇文章。

2. 项目搭建

在项目搭建之前需要先安装好nacos、mysql、jdk

我的本机环境:

jdk1.8
springboot2.3.7.RELEASE
nacos2.0.3
mysql8.0

提前导入数据库order_test.sql,该文件已放在git项目地址中的根项目的doc文件夹中

2.1 根项目搭建

首先要创建一个根项目,这个根项目是个空项目,主要用于统一管理其他服务。同时为了方便后续的演示,我们会在根项目下再创建一个空项目,用于本期的项目演示。后续的项目实战就也在根项目下创建了。也方便大家拉取代码

1、创建一个空maven项目,无需选择其他依赖,命名为cloud-study
在这里插入图片描述
2、删除项目下的src目录,仅保留一个pom文件

3、然后再在这个项目目录下再创建一个子模块,并且也是空项目,这个空项目就包含我们本次演示的所有代码,下一次演示时再单独创建一个子模块来承装

选中根项目>右键>new>Module
在这里插入图片描述
无需选择其他内容,就创建一个空maven项目,命名为springcloud1。同样删除src目录。
在这里插入图片描述
在根项目的pom中添加上springcloud1的模块

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>cloud-study</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>

<modules>
<module>springcloud1</module>
</modules>
</project>

2.2 创建网关服务

1、在springcloud1下新建子模块,项目类型选择springboot,项目命名为gateway
在这里插入图片描述
2、添加gateway、nacos依赖,这里选择的springboot版本是2.3.7
在这里插入图片描述
3、删除其他不需要的文件
在这里插入图片描述
4、修改配置文件application.properties,并将其修改为.yml格式的

# 应用名称
spring:
application:
name: gateway
cloud:
gateway:
discovery:
locator:
# 开启从注册中心动态创建路由的功能,利用微服务名进行路由
enabled: true
nacos:
discovery:
username: nacos
password: nacos
server-addr: localhost:8848
# 如果是public就不用填写了
namespace:

# 应用服务 WEB 访问端口
server:
port: 80

5、gateway启动类上添加@EnableDiscoveryClient注解,如果项目自动创建了nacos配置类NacosDiscoveryConfiguration的话,就不用再添加这个注解了,因为该配置类中已经添加了

6、在gateway的pom中添加上gateway的module

<modules>
<module>gateway</module>
</modules>

2.3 创建订单服务

1、在springcloud1下创建springboot项目,命名order-server。并引入如图所示依赖
在这里插入图片描述
2、修改配置文件application.yml

server:
port: 8081
# 应用名称
spring:
application:
name: order-server
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: localhost:8848
# 如果是public,就不用填了
namespace:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
name: defaultDataSource
url: jdbc:mysql://localhost:3306/order_test?serverTimezone=UTC
username: root
password: 123456

3、创建实体类order,注意order是sql关键字,所以声明数据表名时要添加上``将order括起来

@TableName("`order`")
@Data
public class Order {
private Long id;
private String orderNo;
private Date createTime;
}

4、创建mapper,service,controller等,具体创建步骤省略,详细代码可到git下载项目查看。其中controller提供一个list接口

@RestController
@AllArgsConstructor
public class OrderController {
private final IOrderService orderService;

@GetMapping("list")
public List<Order> list(){
return orderService.list();
}
}

2.4 创建商品服务

1、springcloud1下创建一个springboot项目,命名为product-server,并引入如图依赖
在这里插入图片描述
2、修改配置文件application.yml

server:
port: 9091
# 应用名称
spring:
application:
name: product-server
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: localhost:8848
# 如果是public的话,就不用填了
namespace:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
name: defaultDataSource
url: jdbc:mysql://localhost:3306/order_test?serverTimezone=UTC
username: root
password: 123456

3、创建实体类

@Data
public class Product {

private Long id;
private String name;
private String no;
private Double price;
private Date createTime;

}

4、mapper,service等代码省略,项目git中可以查看。controller中添加list接口

@RestController
@AllArgsConstructor
public class ProductController {
private final IProductService productService;

@GetMapping("list")
public List<Product> list(){
return productService.list();
}

}

3. 测试

1、运行gateway,order-server,product-server项目

2、查看nacos,服务列表中会发现服务已经注册上来了
在这里插入图片描述
3、测试订单服务请求转发,访问 http://localhost/order-server/list

可以看到我们正常获取到了订单的数据,我们访问的是80端口,订单服务实际是8081端口,通过网关的服务名实现动态路由转发,从而使得我们的请求最终打到了order-server上
在这里插入图片描述
4、测试商品服务,访问 http://localhost/product-server/list
在这里插入图片描述
如上所示,我们的网关和注册中心就配置成功了。但是还有一点,目前我们的配置文件还只是写在

4. 将配置文件上传到配置中心

1、如果项目创建时引入了nacos-config依赖的话,会在项目中创建一个bootstrap.properties文件,里面配置的就是nacos config配置文件,如果没有的话,就创建一个,有的话将配置文件修改为以下内容:

# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=localhost:8848
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
# spring.cloud.nacos.config.namespace=
spring.cloud.nacos.config.file-extension=yaml
spring.profiles.active=dev

2、在nacos中创建配置文件
order-server-dev.yaml
在这里插入图片描述
product-server-dev.yaml
在这里插入图片描述
3、修改product-server配置文件application.yml
将文件名修改为application-dev.yml。如果有测试环境和生产环境,可以分别创建application-test.yml,application-prod.yml配置文件,分别对应测试环境和生产环境配置文件,然后用命名空间来区分。

将配置文件内容修改为:

server:
port: 9091
# 应用名称
spring:
application:
name: product-server
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: localhost:8848
namespace:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
name: defaultDataSource
url: ${spring.datasource.url}
username: ${spring.datasource.username}
password: ${spring.datasource.password}

4、同理修改order-server服务的配置文件,文件名修改为application-dev.yml

server:
port: 8081
# 应用名称
spring:
application:
name: order-server
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: localhost:8848
namespace:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
name: defaultDataSource
url: ${spring.datasource.url}
username: ${spring.datasource.username}
password: ${spring.datasource.password}

5、重启服务后,访问http://localhost/product-server/list和http://localhost/order-server/list,如果访问正常则说明配置成功了
在这里插入图片描述
6、测试、生产环境如何切换配置文件,测试环境运行时需要指定启动参数spring.profiles.active=test,这样才能让配置文件切换为测试环境

5. 总结

到现在针对微服务框架的最核心组件就讲解完了,了解到这里是不是觉得微服务框架其实也没有那么神秘那么难,任何复杂的技术都是由简入深。

我们能够掌握住核心的组件,在工作中就可以承担其一个服务的开发任务了。注意学习千万不要停留在纸上谈兵,一定要自己去动动手,可以参考这篇博客,自己尝试着去搭建。不要一上来就去看git的代码。

自己搭建的过程中,哪怕是一步一步照着文章搭建的,肯定也会遇到各种各样的问题,有报错不要着急,细心的去排查,记录下每个报错以及最终的解决方法。慢慢的,你就会发现自己的成长了。

最后附上本次项目的代码

6. 项目代码下载

项目git地址

下期预告

1、微服务框架进阶讲解

关注公众号,了解更多新鲜内容

在这里插入图片描述

举报

相关推荐

0 条评论