为什么使用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