为什么使用Gateway
从没有网关的角度来看后台如有N个服务,那么前端则需要对接N个服务;只要后台修改IP或者端口等任何信息那么前端也需要修改。
当服务对接了网关后前端只需要统一调用网关入口即可,具体调用那个服务,IP地址或者端口号是多少前端无需关注由网关处理。
搭建网关服务
创建普通SpringBoot工程(spring-cloud-alibaba-gateway)该工程当前用于搭建微服务网关pom.xml
- "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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
- <parent>
- <groupId>com.giteegroupId>
- <artifactId>spring-cloud-alibaba-version-parentartifactId>
- <version>0.0.1version>
- parent>
- <groupId>com.gitee.example.gatewaygroupId>
- <artifactId>spring-cloud-alibaba-gatewayartifactId>
- <version>0.0.1version>
- <packaging>jarpackaging>
- <dependencies>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-bootstrapartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-openfeignartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-gatewayartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-loadbalancerartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webfluxartifactId>
- dependency>
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
- dependency>
-
- <dependency>
- <groupId>org.apache.commonsgroupId>
- <artifactId>commons-lang3artifactId>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- dependency>
- <dependency>
- <groupId>cn.hutoolgroupId>
- <artifactId>hutool-allartifactId>
- <version>${hutool.version}version>
- dependency>
- dependencies>
-
- project>
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
