初学微服务,记录下学习过程
nacos
nacos是阿里巴巴的一个开源项目,用来服务发现与注册的
安装完nacos,解压路径不要有中文,打开bin目录,点击startup.cmd运行nacos,因为nacos默认是集群运行的,没配置,会报错。作为新手练手,可以运行单机模式。单机修改startup.cmd
在set MODE="cluster" 改成set MODE="standalone",关掉重新启动就可以了。
nacos是有自带数据库的,但是不好管理,所以需要做持久化处理
打开conf文件夹里的application.properties配置文件,找到
默认是注解的,需要打开,目前只支持mysql,替换成自己的配置,特别要注意把db.num=1打开,不然启动不了,会报错。
创建数据库,与上面配置数据库名字相同把conf里的mysql的sql文件拉到数据库可视化软件运行。
nacos启动成功页面
浏览器输入http://127.0.0.1:8848/nacos
输入账号密码,默认均为nacos
nacos算是配置成功了。
springcloud
springcloud算是微服务的框架的大热门了。比较容易上手。
搭建一个maven主项目,用来给其他服务使用,以免使依赖冲突,pom文件:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.10</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lsm</groupId>
<artifactId>springcloud-nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springcloud-nacos</name>
<description>springcloud-nacos</description>
<packaging>pom</packaging>
<modules>
<module>springcloud-nacos-client</module>
<module>springcloud-nacos-service</module>
</modules>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
//java的一个工具类,里面功能很全
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
//springboot开发的工具类,用于实体类的注解,setget可以不用写
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
//是阿里巴巴基于springcloud封装的组件,用于发现和注册服务
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
//用来引用nacos的启动器
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.5.0</version>
</dependency>
//springboot2.4后对bootstrap.yml等文件支持,需引入的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.0</version>
</dependency>
//是用于发现nacos上的配置中心的配置文件
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.0.5.0</version>
</dependency>
//nacos组件,用于把服务注册到nacos上
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.4.1</version>
</dependency>
//springcloud中的一个组件,用于简化http服务之间的通信
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
//Swagger 的增强版,用来管理和测试接口
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
//用于校验参数
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
//springcloud的一个组件,用于负载均衡
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.6</version>
</dependency>
//用于用于生成映射类
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.3.1.Final</version>
</dependency>
//处理注解
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.1.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
在主模块下搭建两个子模块pom文件:
client层
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
//继承主模块依赖
<parent>
<groupId>com.lsm</groupId>
<artifactId>springcloud-nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lsm</groupId>
<artifactId>springcloud-nacos-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springcloud-nacos-client</name>
<description>springcloud-nacos-client</description>
<properties>
<java.version>11</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
service层
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.lsm</groupId>
<artifactId>springcloud-nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lsm</groupId>
<artifactId>springcloud-nacos-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springcloud-nacos-service</name>
<description>springcloud-nacos-service</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
//导入client层依赖
<dependency>
<groupId>com.lsm</groupId>
<artifactId>springcloud-nacos-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在service层中配置文件包创建bootstrap.yml文件
server:
port: 4399
spring:
application:
name: springcloud-nacos //服务名,注册到nacos的就是这个
profiles:
active: dev //开发环境
cloud:
nacos:
discovery:
server-addr: http://127.0.0.1:8848 //nacos的地址,默认端口为8848
namespace: dev //命名空间id
group: DEFAULT_GROUP //分组
config:
server-addr: http://127.0.0.1:8848
namespace: dev
group: DEFAULT_GROUP
file-extension: yml //文件后缀
shared-configs: //从配置中心读取公共配置
- data-id: lsm-mysql.yml //id
group: DEFAULT_GROUP //分组
打开nacos网页 点击命名空间
一开始只有一个public,需要自己创建一个dev,点击新建,
空间id一定要与你在bootstrap.yml文件的 namespace里的一样,不然会注册不到。
然后点击配置管理的配置列表
可以在里面创建一些公共配置,比如mysql的连接
dataid一定要和你的bootsrap一致
在service模块中创建springboot主类
启动,回到nacos页面点击服务列表
选择dev空间
看到了有一个服务,说明注册成功了。
在数据库中创建一个user表,字段:id,name,age
在service模块创建实体类
创建mybatis-plus的mapper层
在client模块中创建实体类映射dto
在client模块创建服务接口
在service模块中创建servivce层与impl层
创建controller层,继承client模块的服务接口
启动service模块,进入网页http://localhost:4399/doc.html,调试接口
到这服务算是写好了,接下来搭建一个客户端
创建一个springboot项目,偷个懒,依赖继承服务端的依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.lsm</groupId>
<artifactId>springcloud-nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lsm</groupId>
<artifactId>spring-cloud-nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-nacos</name>
<description>spring-cloud-nacos</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.lsm</groupId>
<artifactId>springcloud-nacos-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
创建bootstrap.xml文件
server:
port: 4366
spring:
application:
name: spring-cloud-nacos
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: http://127.0.0.1:8848
namespace: dev
group: DEFAULT_GROUP
config:
server-addr: http://127.0.0.1:8848
namespace: dev
group: DEFAULT_GROUP
file-extension: yml
shared-configs:
- data-id: lsm-mysql.yml
group: DEFAULT_GROUP
运行客户端
打开nacos网页,多了一个服务,注册成功
创建vo层
创建service与impl层,maven导入服务client层依赖、
创建controller层
在启动类上添加
@EnableFeignClients(basePackages = {"com.lsm.springcloud.nacos.client"})扫描所有服务的client层的接口
启动客户端,开打http://localhost:4366/doc.html调试接口
微服务调动成功。ok,圆满结束。