API网关
在微服务架构中,通常会有多个服务提供者。设想一个电商系统,可能会有商品、订单、支付、用户等多个类型的服务,而每个类型的服务也会随着整个系统体量的增大也会随之增长和变更。作为UI端,在展示页面时,可能需要从多个微服务中聚合数据,而且服务的划分位置结构可能会有所改变。网关就可以对外暴露聚合API, 屏蔽内部微服务的微小变动,保持整个系统的稳定性。
- api网关有点类似于设计模式中的facade(外观)模式。
- api网关一般都是微服务系统中的门面。
- api网关是微服务中的重要组成部门。
API网关的作用
- 身份验证和安全:是否登录,当前环境是否安全。
- 审查和监测:有点类似于拦截器。请求和数据返回都需要经过网关。
- 动态路由:比如直接路由到第三方API接口
- 压力测试
- 负载均衡:dubbo中有实现。
- 静态相应处理
- 服务聚合:将业务中多个服务的调用,通过api网关暴露一个接口。
api网关模块构建
项目基于guns开源系统搭建,直接拷贝一个test模块为guns-gateway模块。
api网关模块集成dubbo
1、加入依赖包:
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- zookeeper 客户端依赖包-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
2、dubbo相关配置
spring:
application:
name: meeting-gateway
dubbo:
server: true
registry: zookeeper://localhost:2181
3、启动类添加注解@EnableDubboConfiguration
@SpringBootApplication(scanBasePackages = {"com.stylefeng.guns"})
@EnableDubboConfiguration
public class GunsRestApplication {
public static void main(String[] args) {
SpringApplication.run(GunsRestApplication.class, args);
}
}
4、集成成功本地启动zookeeper,启动项目测试能否成功。
抽离业务功能
在开发过程中,服务间调用都会有一个相同的接口,此时如果每个服务间都重复的去写一个类接口,会造成代码的重复,建议公共业务的代码通过新建一个子模块来实现维护。