介绍:
本教程没有很多文字介绍,纯代码分享,加上一下注释作用这些。
代码时间:
2024-04-19
开发环境:
windows 10专业版
idea 2022.3.3
jdk1.8
SpringBoot 2.5.6
SpringCloud 2020.0.4
SpringCloudAlibaba 2021.1
注意:
springBoot和cloud有版本依赖的,具体那个版本对应那个版本可以根据这个查看:
版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
SpringCloudAlibaba的组件使用了:
服务发现与注册+配置中心:nacos
服务之间接口调用:openFeign
负载均衡:这个弄的不是很明白,说的是openFeign会自动集成 Ribbon 来实现负载均衡
网关(多个服务同一端口调用):gateway
服务保护(接口限流):sentinel
组件安装使用:
上面的组件nacos和sentinel是需要单独启动后才能在项目中使用的。
nacos安装使用教程:
sentinel安装使用教程:
项目开始:
首先使用idea创建一个maven项目。
然后删除src目录,删除后是这样。
打开pom.xml文件,添加SpringCloudAlibaba相关依赖。
<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>cloudTest4</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<!-- 引入spring-boot作为父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<name>cloudTest4</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-boot.version>2.5.6</spring-boot.version>
<spring-cloud.version>2020.0.4</spring-cloud.version>
</properties>
<!-- 加上dependencyManagement 用于集中管理项目中所有模块的依赖项版本,但并不实际引入这些依赖项
方便子项目引入依赖项时无需再声明版本号 -->
<dependencyManagement>
<dependencies>
<!-- spring-cloud-alibaba的总包-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud 的总包,必须要有这个 alibaba才能使用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 这个是日志和实体类需要 免get set-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<!-- json-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.9.graal</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
然后右键cloudTest4这个项目,点击new-module,新建一个子模块。
然后还是选择maven项目,这里我们新建一个project1子模块。
project1子模块新建好以后,打开project1项目下面的pom.xml添加对应依赖。
<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>
<parent>
<groupId>org.example</groupId>
<artifactId>cloudTest4</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>project1</artifactId>
<packaging>jar</packaging>
<name>project1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--alibaba-nacos-discovery(阿里注册中心discovery) 服务发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--alibaba-nacos-config 配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- nacos配置中心 不加启动报错-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
</project>
project1这个模块我准备只使用nacos的服务注册和配置中心,简单的使用下组件。
之后打开project1下面的src,删除test文件夹,在main文件夹下面添加文件夹resources。
并在resources文件夹下面新增bootstrap.yml文件,注意是新建的是bootstrap.yml,不是application.yml。具体为什么自己查。如下:
然后我们编辑bootstrap.yml文件。
server:
## 启动端口
port: 8401
spring:
application:
## 注册服务名,nacos会使用这个作为服务名称
name: project1
profiles:
# 配置文件环境名称,可以加,可以不加
active: dev
cloud:
nacos:
discovery:
# nacos的地址
server-addr: 127.0.0.1:8848
# nacos的命名空间,默认是public,使用默认命名空间可以不需要这个属性。
namespace: 4e53aaa9-5d5c-41d2-9750-60420a8d539c
## 配置中心地址 nacos的配置文件名称是根据 spring.application.name 来命名的,
# 还有就是file-extension配置的后缀名,再就是spring.profiles.active环境,
# 这种情况下读取necos的配置文件名称优先级就是project3-dev.yml>project3.yml>project3,三种配置文件名称都会读,有优先级
config:
server-addr: 127.0.0.1:8848
## 指定读取配置文件的后缀
file-extension: yml
## 分组 默认的
group: DEFAULT_GROUP
# 读取上面设置好的nacos命名空间
namespace: ${spring.cloud.nacos.discovery.namespace}
# 共享配置 就是多个服务都会访问这个nacos配置文件 这里的配置文件名称是:application-dev.yml 这个优先级低于服务的配置文件
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
bootstrap.yml编辑好后,打开nacos的控制台系统,我是本机运行的nacos,所以地址是:http://127.0.0.1:8848/nacos/index.html
我这里使用了nacos的命名空间,所以新建了一个命名空间:
命名空间建好后,根据如图点击创建配置:
这里输入自己的Data ID,命名规则看bootstrap.yml里面的描述。
输入好后点击发布。nacos的配置文件就建好了。
除了这个,nacos还有一个共享配置的功能,按照bootstrap.yml里面的描述,在nacos里面按照上面的方法新建一个配置文件application-dev.yml即可。
nacos的配置文件创建好后,回到idea在project1下面,java文件里面自带一个App.java文件,
重命名为Project1App.java,并修改里面的内容。
Project1App.java修改如下:
package org.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* Hello world!
*
*/
@SpringBootApplication
//nacos服务发现
@EnableDiscoveryClient
public class Project1App
{
public static void main( String[] args )
{
SpringApplication.run(Project1App.class,args);
System.out.println( "--------project1启动成功---------" );
}
}
修改之后,在这个文件下面的main下面右键运行项目即可。启动成功后可以打开nacos的控制台,里面就可以看见起的的服务了:
我们在Project1App.java文件的同级目录下新建一个测试Test1Controller类:
Test1Controller.java编辑如下:
package org.example;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Test1Controller {
// 获取配置文件里的name
@Value("${spring.application.name}")
private String name;
// nacos配置文件里面配置的属性
@Value("${param1}")
private String param1;
@GetMapping("/get")
public String get() {
return "我是服务:"+name+",获取到nacos的配置属性:"+param1;
}
}
重新运行,然后浏览器访问链接:http://127.0.0.1:8401/get
得到如图,代表nacos已经使用成功了。
project2
然后再按照上面的步骤再创建一个子模块project2,里面使用nacos的服务发现和配置中心,
再加上openFeign,使用openFeign调用project1的接口。网上说openFeign有自己集成Ribbon作为负载均衡,这个目前还不太理解。
project2创建完成后,再创建一个project3,这个模块主要是作为网关服务,通过project3的端口可以直接访问其他服务的接口。这个服务使用了gateway+nacos+sentinel。
使用nacos作为服务发现和配置中心。
使用gateway作为网关。
使用sentinel做接口限流。
这些子模块在这里就不详细描述了,直接上源码地址:
cloudTest2: SpringCloudAlibaba 新手入门教程 纯代码
这个源码比上面描述的更详细。如果看了源代码和源代码的注解都还有没看懂的地方,欢迎在下方留言哪里没看懂,我在把详细过程写出来。
如果有什么问题,欢迎大佬指正。
最后如果对你有一点点帮助,麻烦支持一下。
全国寄快递5元起,电影票8.8折。更多优惠微信关注公众号:【折价寄件】
感谢阅读!!!!