框架及技术
环境:IDEA、JDK1.8、MYSQL5.0、NacosServer 2.1.1
技术:SpringBoot+Nacos+SpringCloud Gatway+SpringCloud OpenFegin+Spring Sleuth+Maven
目标
用Maven搭建一个SpringCould微服务项目,用Nacos作为服务注册中心,集成SpringCloud GateWay,SpringCloud OpenFegin、SpringCloud Sleuth等组件使用,
创建三个SpringBoot项目,将三个项目全部注册到Nacos上,实现SpringCloud Gateway访问服务的转发,并且实现使用Springcloud Openfegin进行服务间的调用,使用SpringCloud Sleuth进行服务调用的链路追踪。
1.新建母项目mrserver
使用Maven空项目新建母项目mrserver,删除src目录等无用目录,如下图:
2.新建子模块项目auth/gateway/user
使用Maven空项目在mrserver下建立子服务auth,gateway,user三个springboot项目
3.修改pom文件
修改pom文件,将每个项目所需的依赖进行配置,详细如下:
注意:mrserver作为父项目,直接声明了springcloud,springboot的依赖包,子项目可直接引用,并在父项目pom中声明了一些依赖,但是不会生效。
(1)mrserver的pom.xml
<?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>
<modules>
<module>auth</module>
<module>user</module>
<module>gateway</module>
</modules>
<!--新增Springboot父依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.13.RELEASE</version>
</parent>
<groupId>org.example</groupId>
<artifactId>mrserver</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包方式为pom-->
<packaging>pom</packaging>
<!--声明所有用到的组件版本 springboot,springcloud,alibaba三者版本要对应-->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<cloud.alibaba.version>2.2.1.RELEASE</cloud.alibaba.version>
<cloud.version>Hoxton.SR12</cloud.version>
<mysql.version>8.0.23</mysql.version>
</properties>
<dependencies>
<!--父模块默认加上nacos,openfeign,子模块可直接依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
</dependencies>
<!-- dependencyManagement隐式声明引用-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 使用maven插件进行项目构建-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
引入pom.xml依赖是所遇到的问题:spring-cloud-starter-alibaba-nacos-discovery 无法引入 关于IDEA中spring-cloud-starter-alibaba-nacos-discover
解决方案:
1.修改IDEA中的maven配置,把下面这个属性修改为Fail Fast(原来默认为default)
2.给配置加上版本号
问题解决!
(2) auth模块的pom.xml
<?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">
<parent>
<artifactId>mrserver</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>auth</artifactId>
<!-- 打包方式为jar-->
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
</project>
(3)gateway的pom.xml
<?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">
<parent>
<artifactId>mrserver</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>gateway</artifactId>
<!-- 打包方式为jar-->
<packaging>jar</packaging>
<!--springclouc gateway 默认集成了webflux-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
</dependencies>
</project>
(4)user的pom.xml
<?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">
<parent>
<artifactId>mrserver</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>user</artifactId>
<!-- 打包方式为jar-->
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
</project>
4.给每个模块加上启动类XXXApplication
给auth,gateway,user服务分别建立启动类:
5.修改yml配置文件
建立并修改yml配置文件:
1)配置nacos注册信息,将服务注册到nacos进行管理
2)配置服务端口
3)gateway需要配置服务的网关路由信息
详细的配置信息如下:
(1)配置auth的yml文件
spring:
application:
name: authserver
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 81
(2)配置user的yml
spring:
application:
name: userserver
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 82
(3)配置gateway网关的yml信息
此处配置两个,一个是application.yml,另外一个是bootstrap.yml
application.yml
server:
port: 80
spring:
cloud:
gateway:
routes:
#设置auth服务的皮pen路由
- id: authserver
uri: lb://authserver
predicates:
- Path=/authserver/**
filters:
- StripPrefix=1
#设置user服务的匹配路由
- id: userserver
uri: lb://userserver
predicates:
- Path=/userserver/**
filters:
#StripPrefix=1 去掉一个前缀,比如 a/b/c.html -> b/c.html
- StripPrefix=1
bootstrap.yml
spring:
application:
name: gatewayserver
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
原理扩展之application.yml/yaml/properties,bootstrap.yml/yaml/properties解读:
Spring Boot 默认支持 properties(.properties) 和 YAML(.yml .yaml ) 两种格式的配置文件,yml 和 properties 文件都属于配置文件,功能一样。
Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap,另外一种是 application。
加载顺序:若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载 application.yml后加载
配置区别:
bootstrap.yml 和 application.yml 都可以用来配置参数。
bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootStrap.yml 被加载,则内容不会被覆盖。
application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。
6.添加Controller测试类
在auth,gateway,user上添加controller测试类,注意测试类的路径要和gateway路由中的路径相同:
接下里,在每个服务下添加Controller测试类
至此,代码框架的环境已经准备完成!接下来启动Nacos服务,将三个服务分别注册到Nacos Server进行管理
安装Nacos服务
前提:mysql数据库已经安装配置成功
Nacos下载地址:https://github.com/alibaba/nacos/releases
(一)Nacos文件下载
(二)解压到自己想要安装的位置
(三)在mysql上建立Nacos数据库
(四)进入nacos安装地址下的conf文件中,找到nacos-mysql.sql,在Mysql中nacos数据库中执行语句。
(五)将cluster.conf.example文件的扩展名.example去除
(六)修改application.properties文件内容,是Mysql配置信息生效
application.properties文件中本身含有mysql的配置信息,将注释放开并修改用户名,密码即可。(我的mysql密码为空,所以没写)
(七)启动Nacos
在nacos的bin文件中找到startup.cmd执行启动nacos
出现如下界面,即表示nacos启动成功。
(八)通过浏览器访问Nacos
地址:http://localhost:8848/nacos
用户名密码均为:nacos
**7.分别启动服务
服务已成功注册
8.正常访问业务
访问user业务中的方法,如:http://localhost/userserver/userserver/user
在输入地址的时候,不用在localhost后输入端口号,因为默认会访问80(即gateway服务),gateway服务作为项目网关会跳转到对应的服务方法中。
gateway服务网关配置
9.通过OpenFeign访问服务
服务A通过Spring OpenFeign方法调用服务B
访问:http://localhost/authserver/demo/feign
问题描述:在使用GatWay转发OpenFeign服务时报错:
No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters'
解决方法:在@SpringBootConfiguration 类中添加如下代码
@Bean
@ConditionalOnMissingBean
public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters){
return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));
}
问题解决!
标签:框架,spring,nacos,gateway,SpringCloud,org,yml,cloud,搭建 From: https://www.cnblogs.com/weiyahui/p/16783916.html