序言:GateWay集成Nacos 所需要注意的地方,我觉得第一就是依赖,因为好多依赖是有冲突的或者缺东西的,所以集成依赖一定要,注意版本的同意或者说版本的选择,版本选不好,遇坑不会少,接下来我就把依赖放出来,仅供参考
一:GateWay&Nacos项目集成
1:注入依赖-之依赖的选择
信我:这版本没有坑
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!--gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<!--nacos dicovery-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</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>0.2.2.RELEASE</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>
</plugins>
</build>
2:配置bootstrapt文件了
注意:需要注意的是文件的locator.enabled=true 和locator:lowerCaseServiceId=true 需要开启 第一个是开启服务注册与发现,可以和Nacos进行配置使用lb进行url的转发 和后期的负载均衡 另外一个是因为注册中心会将路径转为大写,按照标准是小写的 所以这样写
注意:yml文件需要配置在bootstrapt文件里面,因为这个文件是先鱼application文件加载的对于SpringBoot
spring:
application:
name: feiyu-gatway
cloud:
nacos:
discovery:
server-addr: 192.168.31.137:8848
namespace: ae087f8a-9b9c-4698-9a95-160a1461fc1f
config:
server-addr: 192.168.31.137:8848
file-extension: yml
namespace: ae087f8a-9b9c-4698-9a95-160a1461fc1f
gateway:
discovery:
locator:
enabled: true #表明gateway开启服务注册和发现的功能,并且spring cloud gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务。
lowerCaseServiceId: true #是将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了),比如以/service-hi/*的请求路径被路由转发到服务名为service-hi的服务上。
filters:
- StripPrefix=1
routes:
- id: feiyu-web
uri: lb://feiyu-web
predicates:
- Path=/web/**
filters:
- StripPrefix=1
profiles:
active: dev
三:创建启动文件 注意:需要@EnableDiscoveryClient 开启发现 这个是官方推荐的写法
package com.feiyu.config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class GatWayApplication {
public static void main(String[] args) {
SpringApplication.run(GatWayApplication.class);
}
}
二:SpringBoot的客户端如何选择
1:注入依赖-之依赖的选择
注意:需要这两个依赖:直接就是SpringBoot支持的,用起来比较方便
<!--服务注册-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!--动态配置-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2:配置bootstrapt文件了
同理:一样是因为先加载所以就配置了Nacos的服务配置,以让注册中心进行发现
解释一下参数:
active: 这个参数是命名空间
namespace: 命名空间id
server-addr:nacos安装的ip地址
file-extension:yml 配置文件的文件类型
spring:
application:
name: feiyu-web
cloud:
nacos:
discovery:
server-addr: 192.168.31.137:8848
namespace: ae087f8a-9b9c-4698-9a95-160a1461fc1f
config:
server-addr: 192.168.31.137:8848
file-extension: yml
namespace: ae087f8a-9b9c-4698-9a95-160a1461fc1f
profiles:
active: dev
3:启动类
同理:和上面一样要贴@EnableDiscoveryClient 开启服务的注册与发现·
package com.feiyu.config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class GatWayApplication {
public static void main(String[] args) {
SpringApplication.run(GatWayApplication.class);
}
}
三:原理分析 为什么网关需要集成注册中心,来进行负载均衡(默认1:1切换),其理由我是觉得使用Nacos用于注册中心,当SpringBoot客户端启动项目,该项目注册到注册中心时会粗壮乃记录,网关获取到注册的存在记录,也就是项目名称,同时获取了该项目名称所在地址,当我们通过GateWay进行访问时,那么网关会先通过项目名称,也就是Application.name 来进行路由,同时可以进行负载均衡,需要设置一下优先值(在Nacos) 需要Nacos 怎么注册的可以到 Nacos的安装和使用