以前了解过经过springCloud整合阿里的nacos做为配置中心,因为以前的需求是想要配置中心搞成可管理的化的,而原始的springCloudConfig是要把配置放到git上再结合springCloudBus才能实现配置的动态刷新。java
刚开始是研究了一下携程的apollo做为配置中心,可是光是搭建起来就花了一些功夫,而后再整合到springcloud中,感受仍是有点麻烦的,后来也不知哪里据说的阿里的nacos也能够作就抱着试一下的心态学了一下。git
学完就发现很是的简单,不光是搭建简单并且整合起来也很是的容易,nacos能够做为配置中心,可是由于项目的一直用的是eureka因此也就没去想那部分,偶尔心血来潮就整了下gateway+naocs过程很是的简单。spring
首先依赖的版本要对应好,否则会有不少的问题 图片和代码apache
<?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.2.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.lyj</groupId> <artifactId>api-gateway-nacos</artifactId> <version>0.0.1-SNAPSHOT</version> <name>api-gateway-nacos</name> <description>Demo project for Spring Boot</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR3</spring-cloud.version> <spring-cloud-alibaba.version>0.2.1.RELEASE</spring-cloud-alibaba.version> <swagger.version>2.9.2</swagger.version> </properties> <dependencies> <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-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <!-- API文档配置 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${swagger.version}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${swagger.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <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.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--skip tests--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build> </project>
Maven的配置能够按照个人这个配置,而后配置对应的yml和所需的注解bootstrap
bootstrap.yml配置:windows
server: port: 9099 spring: application: name: api-gateway-nacos cloud: nacos: discovery: server-addr: 127.0.0.1:8848
application.yml配置:api
spring:cloud:gateway:discovery:locator:enabled: truelowerCaseServiceId: true # 请求服务是小写的时候改为true(默认为false轻微服务必须是大写)routes:- id: useruri: lb://user # 服务端 service_idorder: 8089# 网关断言匹配predicates:- Path=/user/** # 路由映射路径 这里注意,这个路径会追加到 service_id后filters:- GwSwaggerHeaderFilter - StripPrefix=1 # 转发过滤前缀个数 ribbon:eureka:enabled: true # 开启eureka轮询eager-load:enabled: true # 开启Ribbon的饥饿加载模式(防止第一次请求超时的问题)clients: user, product # 指定须要开启的服务(须要开启Ribbon的饥饿加载模式)ReadTimeout: 60000ConnectTimeout: 60000MaxAutoRetries: 0MaxAutoRetriesNextServer: 1OkToRetryOnAllOperations: false# 设置最大容错超时时间# 执行超时时间为9秒,会对服务熔断路由defaultfallback生效hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 90000# 设置最大容错超时时间hystrix:threadpool:default:coreSize: 100maximumSize: 5000allowMaximumSizeToDivergeFromCoreSize: truemaxQueueSize: -1command:default:circuitBreaker:# 是否强制将断路器设置成开启状态(true开启,false不开启)最好不开启否者会致使访问服务一直熔断foreOpen: falseexecution:timeout:enabled: trueisolation:thread:timeoutInMilliseconds: 900000
这边配置的注释已经写的很清楚了,能够根据须要CRUD,接着启动windows的nacosapp
而后启动项目maven
服务已经成功注册上来,接着注册对应服务随便写个测试类调用便可成功的实现网关的转发调用分布式
注册服务的端口是9090,网关服务的端口是9099
经过网关的端口成功调用到jwt服务的应用,到这gateway整合nacos就顺利的完成了。