您现在的位置是:首页 >技术交流 >微服务之以nacos注册中心,以gateway路由转发服务调用实例(第一篇)网站首页技术交流

微服务之以nacos注册中心,以gateway路由转发服务调用实例(第一篇)

十里八方 2024-06-17 10:48:56
简介微服务之以nacos注册中心,以gateway路由转发服务调用实例(第一篇)

项目版本汇总

nacos2.1.1
springCloud2021.0.7
springboot2.6.14
spring-cloud-starter-alibaba-nacos-discovery2021.1
spring-cloud-starter-alibaba-nacos-config2021.1

项目初始化

新建仓库

可使用github/gitlab/码云等其它代码库,建立自己的项目仓库
我这里使用的是码云

码云地址

拉取仓库项目

git clone 你新建的仓库地址
下载后,用idea打开(这里默认你能配置maven,jdk以及java环境变量的操作)

父工程pom初始化

用途:该pom用于管理整个微服务项目的依赖框架和版本以及所属子模块等
如图所示:该pom.xml在工程的根目录下创建
在这里插入图片描述

依赖版本选择

  • 进入Spring官网Spring官网选择Project下的Springcloud栏进去
    在这里插入图片描述
  • 版本号对应关系一目了然
    在这里插入图片描述
  • 选择2021.0.x版本的cloud,那么对应的boot版本就是2.6-2.7之间

pom文件如下

spring-cloud-dependenciescloud依赖
spring-boot-dependenciesboot依赖
nacos-clientnacos版本
spring-boot-starter-test单测依赖
spring-cloud-starter-alibaba-nacos-discovery注册中心客户端依赖
spring-cloud-starter-alibaba-nacos-config配置中心客户端
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2021.0.7</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.6.14</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${boot.version}</version>
            <scope>test</scope>
        </dependency>
        <!--注册中心客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2021.1</version>
        </dependency>
        <!--配置中心客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2021.1</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.24</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.26</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.4.3.3</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

    </dependencyManagement>

网关服务构建

在父工程项目点击右键 New-Module起名为xwl-gateway

pom文件

spring-cloud-starter-gateway网关依赖
spring-cloud-starter-openfeignrpc通信依赖
spring-cloud-starter-bootstrapcloud配置文件识别依赖
spring-cloud-loadbalancercloud内置负载均衡器(取代了ribbon)
 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>3.1.7</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.7</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>


    </dependencies>
  <build>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
      </plugins>
  </build>

启动类

@SpringBootApplication
/*开启服务注册中心*/
@EnableDiscoveryClient
public class XwlGatewayApplication  {
    public static void main(String[] args) {
        SpringApplication.run(XwlGatewayApplication.class,args);
    }
}

配置文件YML

#端口号
server:
  port: 10081
#服务名
spring:
  application:
    name: xwl-gateway
# NACOS配置链接注册中心
  cloud:
    nacos:
      discovery:
        #被发现的服务注册地址
        server-addr: 192.168.231.1:8848
        #命名空间
        namespace: f212727d-d812-4945-9464-0fd0e199459b
      config:
        server-addr: 192.168.231.1:8848
        namespace: f212727d-d812-4945-9464-0fd0e199459b
        #绑定配置文件名称前缀(与nacos注册中心上的配置文件名称相关)
        prefix: ${spring.application.name}
        #组id
        group: DEFAULT_GROUP
        #nacos配置文件后缀
        file-extension: yml
    gateway:
      discovery:
        locator:
          enabled: true #开启从注册中心动态创建路由功能
          #路由转发配置
      routes:
        - #以xwl-Authority服务名为唯一标识id
        - id: xwl-Authority
          # 内置服务转发url 也可以是http请求方式
          uri: lb://xwl-Authority
          # 匹配器 这里设置的是以xwlAuthority前缀匹配的url都转发到xwl-Authority服务中
          predicates:
            - Path=/xwlAuthority/**

nacos启动

注:nacos2.0后默认以集群方式启动,这里我们测试方便需要用单机方式启动,需要改个配置,如图所示
将原来的cluster改为standalone
在这里插入图片描述

新建命名空间

在这里插入图片描述

配置网关yml(nacos)

注意:这里的 Data ID要和配置文件中保持一致
在这里插入图片描述

网关服务启动

在这里插入图片描述

用户服务构建

在父工程项目点击右键 New-Module起名为xwl-Authority

pom文件

   <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.6</version>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class XwlAuthorityApplication {
    public static void main(String[] args) {
        SpringApplication.run(XwlAuthorityApplication.class,args);
    }
}

配置文件YML

server:
  port: 10082
spring:
  application:
    name: xwl-Authority

  # NACOS配置链接注册中心
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.231.1:8848
        namespace: f212727d-d812-4945-9464-0fd0e199459b
      config:
        server-addr: 192.168.231.1:8848
        namespace: f212727d-d812-4945-9464-0fd0e199459b
        prefix: ${spring.application.name}
        group: DEFAULT_GROUP
        file-extension: yml
    compatibility-verifier:
      enabled: false
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.231.1:3306/xwlmicroservice
    username: root
    password: root

新增url接口

package cn.xwl.controller;


import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("testAuthority")
public class AuthorityController {


    @PostMapping("/getName")
    @ResponseBody
    public String getName(){
        return "ZHANGSAN";
    }
}

配置用户服务yml(nacos)

以xwl-Authority.yml为创建Data ID
在这里插入图片描述

用户服务启动

在这里插入图片描述

测试路由转发

  1. 访问网关层
  2. 命中gateway配置文件中的url匹配器,从而转发xwl-Authority服务
  3. 发送http请求到xwl-Authority服务命中具体的url
    在这里插入图片描述

源码地址

码云仓库地址

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。