Spring Cloud Alibaba 使用Gateway作为服务网关

为什么使用Gateway

从没有网关的角度来看后台如有N个服务,那么前端则需要对接N个服务;只要后台修改IP或者端口等任何信息那么前端也需要修改。
当服务对接了网关后前端只需要统一调用网关入口即可,具体调用那个服务,IP地址或者端口号是多少前端无需关注由网关处理。

搭建网关服务

创建普通SpringBoot工程(spring-cloud-alibaba-gateway)该工程当前用于搭建微服务网关pom.xml



    4.0.0
    
        com.gitee
        spring-cloud-alibaba-version-parent
        0.0.1
    
    com.gitee.example.gateway
    spring-cloud-alibaba-gateway
    0.0.1
    jar
    
        
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap
        
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        
        
        
            org.springframework.cloud
            spring-cloud-loadbalancer
        
        
        
            org.springframework.boot
            spring-boot-starter-webflux
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
        
            org.apache.commons
            commons-lang3
        
        
            org.projectlombok
            lombok
        
        
            cn.hutool
            hutool-all
            ${hutool.version}
        
    

application.yaml

spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        metadata:
          version: 0.0.1
          appname: ${spring.application.name}
        #指定命名空间 对应dev环境
        namespace: '7e3699fa-09eb-4d47-8967-60f6c98da94a'
        #指定分组 案例组
        group: 'EXAMPLE-GROUP'
        #指定集群环境 华南
        cluster-name: 'HuaNan'
    gateway:
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true
      routes:
        - id: service-member
          uri: lb://service-member
          predicates:
            - Path=/member/**
          filters:
            - StripPrefix=1
        - id: service-user
          uri: lb://service-user
          predicates:
            - Path=/user/**
          filters:
            - StripPrefix=1

启动类定义: GatewayApplication.java

/**
 * gateway 网关
 *
 * @author wentao.wu
 */
@EnableDiscoveryClient // 开启服务发现
@SpringBootApplication // SpringBoot启动
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

先后启动用户服务与会员服务:spring-cloud-alibaba-service-member,spring-cloud-alibaba-service-user,启动完成后启动网关服务: spring-cloud-alibaba-gateway
** 网关访问测试 **
访问用户服务: http://localhost/user/hello/say/userGateway,该接口地址:http://localhost/user这一段会路由到用户服务里面去。
所以实际访问的是用户服务的hello/say/userGateway。

{
"code": "1",
"msg": "你好啊,userGateway!",
"errorCode": null,
"errorMsg": null,
"result": null,
"ok": true
}
源码代码存放地址#

gitee: https://gitee.com/SimpleWu/spring-cloud-alibaba-example.git
cnblogs: https://www.cnblogs.com/SimpleWu
持续更新目录:https://www.cnblogs.com/SimpleWu/p/15476427.html

你可能感兴趣的:(gateway,java,spring,boot,spring,mybatis)