GateWay和Nacos集成SpringBoot

1,961 阅读3分钟

序言: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的安装和使用