最近我打算自己封装一套微服务的模板作为日常开发使用
使用的微服务框架是Dubbo,注册中心为Nacos
但大多数Dubbo应用,大多都是使用nginx负载均衡,在web层进行鉴权,但是没有一个成熟的Api网关
这是我就想到可以通过Nacos接入 Spring Cloud 体系下的 Spring Cloud Gateway 作为Dubbo的网关,用来替代传统Dubbo应用下的Nginx,并且可以将鉴权移至网关处
Dubbo 工程
这里我使用 官方的Dubbo Spring Cloud 示例工程,具体的代码和教程可以看下面的链接
网关开发
在 https://start.spring.io/ 选择Gateway,并下载
首先要添加依赖
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer:3.0.4'
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap:3.0.4'
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2021.1'
- 记得一点要添加
spring-cloud-starter-loadbalancer
这个依赖,不然转发的时候会有503的bug
配置修改
bootstrap.yaml
server:
port: 8000
spring:
application:
name: app-gateway
main:
allow-bean-definition-overriding: true
cloud:
nacos:
server-addr: 127.0.0.1:8848
application.yaml
spring:
cloud:
gateway:
discovery:
locator:
lowerCaseServiceId: true
enabled: true
routes:
- id: app-client
uri: lb://spring-cloud-alibaba-dubbo-client
predicates:
- Path=/app-client/**
filters:
- StripPrefix=1
请求 http://localhost:8000/app-client/echo?message=guiyun
这样服务器通过网关,调用spring-cloud-alibaba-dubbo-client服务
返回[echo] Hello, guiyun
,这样就调用成功了