什么是API网关?
在微服务架构中,通常会有多个服务提供者。设想一个电商系统,可能会有商品、订单、支付、用户等多个类型的服务,而每个类型的服务数量也会随着整个系统体量的增大也会随之增长和变更。作为UI端,在展示页面时可能需要从多个微服务中聚合数据,而且服务的划分位置结构可能会有所改变。网关就可以对外暴露聚合API,屏蔽内部微服务的微小变动,保持整个系统的稳定性。
api网关API网关的作用
- 协议转发,例如Dubbo到Ng http
- api接口聚合
- 路由,比如直接路由到第三方API接口
- 统一鉴权
- 限流
- 防攻击
- 系统拆分
- api横向扩展、高可用、负载均横
- 服务自动扩缩
构建一个简单的WEB网关
首先准备一个SpringBoot Web工程
POM
<!-- 调用Login微服务 -->
<dependency>
<groupId>com.suoron</groupId>
<artifactId>testdubbo-client</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
application.yml
dubbo:
scan:
basePackages: com.suoron.client.service,com.suoron.springboot.config
## ApplicationConfig Bean
application:
id: mobile-web-api
name: mobile-web-api
## RegistryConfig Bean
registry:
id: zookeeper
address: zookeeper://127.0.0.1:2181
# Dubbo Endpoint (default status is disable)
endpoints:
dubbo:
enabled: true
##健康检查http://127.0.0.1:9091/actuator/health
management:
server:
port: 9091
# Dubbo Health
health:
dubbo:
status:
## StatusChecker Name defaults (default : "memory", "load" )
defaults: memory
# Enables Dubbo All Endpoints
endpoint:
dubbo:
enabled: true
dubbo-shutdown:
enabled: true
dubbo-configs:
enabled: true
dubbo-services:
enabled: true
dubbo-references:
enabled: true
dubbo-properties:
enabled: true
health:
show-details: always
endpoints:
web:
exposure:
include: "*"
启动类MyApplication
@ComponentScan("com.suoron.dubbo.client.service")
测试
首先启动微服务Server,然后启动WEB网关
网友评论