目录
前言
开始搭建前的准备工作:
1.Nacos,服务中心确保已安装在Windows或linux中并已启动
我是安装在Windows系统中的,通过小黑窗启动成功访问端口8848即可进入nacos页面
2.确保自己的版本正确,建议大家使用我在下面给的依赖及版本号
一、SpringCloud框架
我们在搭建这套框架前需要了解这个框架的优缺点以及它的特色组件,在这里我会使用Nacos作为服务中心,Feign作为远程调用的工具,Gateway作为服务网关,hystrix来做熔断以及降级等一些功能,用ribbon去做负载均衡,具体每个组件的详细功能我不会再这篇多做概述,因为每个组件都是功能丰富且值得去讨论的优秀组件,在这篇只为大家进行搭建演示。
二、操作步骤
1.创建一个独立的maven项目
创建完成后切换自己的maven仓库
2.导入父依赖
<!--springcloud版本--> <properties> <spring.cloud-version>Hoxton.SR12</spring.cloud-version> <mysql.version>5.1.47</mysql.version> <mybatis.version>2.2.1</mybatis.version> </properties> <!--springcloud依赖--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.7.3</version> </dependency> <!--Redis依赖--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <!--nacos的管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.5.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 转换json数据使用 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> <!-- spring-boot的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud-version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
3.创建一个子模块
每一个子模块中都可以有属于自己的业务功能,这也是springcloud框架的一个特色,可以使我们的代码耦合度更低,比如我现在创建一个子模块为User 顾名思义专门用来解决用户的业务功能。
有了这个子模块后我们需要将它注册到Nacos服务中心中去,以及之后其他服务要远程调用时可能会用到feign,所以我们需要进行以下三步操作
第一步导入子模块所需要的依赖比如,feign,nacos,gateway等等:
<!-- redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.7.3</version> </dependency> <!--Redis依赖--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <!--对象转换相关的依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <!--负责服务监控的依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> <version>1.4.7.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.4.7.RELEASE</version> </dependency> <!--mybatis的相关依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!-- mybatis plus自动生成代码块依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.3.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--引入Feign的依赖--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-feign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.4.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>2.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- nacos客户端依赖包 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
第二步创建一个配置文件在resources目录下,并添加相关的配置文件:
server: port: 8081 spring: servlet: multipart: # 设置 上传文件的大小 max-file-size: 50MB # 设置 整个请求的大小 max-request-size: 50MB application: name: Rocky-User datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.162.130:3306/tanhua?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: root cloud: nacos: server-addr: localhost:8848 discovery: cluster-name: USA redis: host: 192.168.162.130 port: 7000 mybatis: mapperLocations: classpath:mapper/*.xml type-aliases-package: com.tm.pojo configuration: map-underscore-to-camel-case: true feign: hystrix: enabled: true hystrix: dashboard: proxy-stream-allow-list: "*"
注意!yml配置文件要严格按照左对齐原则来控制层级关系,所以层级大家一定要看清楚!!!
第三步添加并配置启动类:
启动类上我们需要几个注解分别是集成Feign和nacos的注解
这三步完成之后大家就可以进行启动测试了
出现这个即为启动成功,这个时候我们可以去Nacos的可视化界面查看一下我们的项目是否存在
存在即为成功注册到nacos中,我们就可以在这个模块中进行我们之后要处理的业务逻辑了!
当然我们可以按照上面的步骤注册多个子模块,因为往往我们使用springcloud这个框架时要去完成的任务量不可能是在一个模块中就完成的。
4.搭建服务网关
接下来我们来进行网关搭建,我们创建一个子模块来专门负责网关的所有业务
同样的我们在子模块中添加相关依赖
<!--mybatis的相关依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!-- mybatis plus自动生成代码块依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.3.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.7.3</version> </dependency> <!--Redis依赖--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>2.2.9.RELEASE</version> </dependency> <dependency> <groupId>io.projectreactor.netty</groupId> <artifactId>reactor-netty</artifactId> <version>0.9.14.RELEASE</version> </dependency> <!-- nacos客户端依赖包 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--nacos的配置管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>9.0.65</version> <scope>compile</scope> </dependency>
之后创建配置类,重要的是配置类中的内容:
server: port: 1000 spring: application: name: Rocky-Gateway redis: host: 192.168.162.130 port: 7000 datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.162.130:3306/tanhua?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: root cloud: nacos: server-addr: localhost:8848 discovery: cluster-name: USA gateway: routes: # 网关路由配置 - id: Rocky-User # 路由id自定义 唯一即可 uri: lb://Rocky-User #陆游的目标地址 lb就是负载均衡 后面跟服务名称 predicates: - Path=/login/** #这个是按照路径匹配,只要以、zkj/开头就符合要求 路由断言 filters: # 将/api-gateway/ 替换成空 # - RewritePath=/zkj(?<segment>/?.*), $\{segment} # - AddRequestHeader=Truth,Rocky is my hero! #追加路径 #- PrefixPath=/user - id: uri: lb://zkj3-user predicates: - Path=/abc/** filters: # 将/api-gateway/ 替换成空 - RewritePath=/abc(?<segment>/?.*), $\{segment} default-filters: - AddRequestHeader=Truth,Rocky is my hero! globalcors: add-to-simple-url-handler-mapping: true #解决option请求被拦截问题 cors-configurations: '[/**]': allowedOrigins: #允许那些网站的跨域请求 - "http://localhost:8090" - "http://www.leyou.com" allowedMethods: #允许的跨域ajax的请求方式 - "GET" - "POST" - "DELETE" - "PUT" - "OPTIONS" allowedHeaders: "*" # 允许在请求中携带头信息 allowCredentials: true # 是否允许携带cookie maxAge: 360000 # 这次跨域检测的有效期
注意层级关系,之后就是启动类了,仍然是自己创建一个启动类。
测试启动,启动完成后我们去Nacos中查看服务是否存在
发现存在说明我们服务网关成功注册服务中心了,既然有了服务网关,我们就要测试一下这个服务网关是否好使,接下来,我将在我们的user用户模块中写一个简单地查询方法,然后通过网关来进行访问,看我们的网关是否确实生效!
在postman中用我们服务网关的ip地址1000发现可以调用的通,说明我们的服务网关没有问题。
总结
到此为止我们的基本搭建就算完毕了,在子模块中我们引入了Feign和hystrix这两个组件的依赖以及配置文件,feign中呢有自带了ribbon的负载均衡策略,我们也可以通过配置文件更改,在这里就先不做测试,之后会写文章详细的概述Feign的远程调用,负载均衡策略Nacos中也已经内置了,我们默认使用Nacos的负载均衡策略即可,如果小伙伴们对框架还有那点不太熟悉欢迎留言评论或私信我哦,真心地希望能够帮到大家,热爱生活,热爱代码。