微服务 6: 集成服务网关 SpringCloud GateWa
2021-04-15 本文已影响0人
_River_
文章知识来源主要来源于:赵俊夫先生的博客 以下为原文链接
https://blog.csdn.net/u011177064/category_9572944.html
1:微服务架构的 服务网关、配置中心、注册中心。
之前分别讲述了Nacos的配置中心、注册中心单独使用,
在注册中心一章中我们是在消费者微服务中先进行了接口地址的寻址,然后再调用的。
这次加上服务网关,就不用这么麻烦啦!
只要将服务网关也注册到服务中心,那么服务网关就会自动代理注册中心的服务,相当于Nginx的作用。
服务网关:Spring Cloud GateWay
注册中心:Spring Cloud Alibaba Nacos Discovery
配置中心:Spring Cloud Alibaba Nacos Config
2:pom 配置文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
这里有一点要特别注意:网关工程pom.xml里需要去掉这个依赖,因为和gateway里的webflux依赖是有冲突的。
(如不去掉会报错: Error creating bean with name 'routeDefinitionRouteLocator' )
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Spring WebFlux是一个新的 reactive web应用框架,自 Spring Framework 5.0引入。
与Spring MVC不同的是,它不需要the Servlet API,是完全异步和非阻塞的,实现了Reactive Streams specification。
WebFlux.fn , the functional variant, 分开了路由配置routing configuration 和实际的请求handler,如下面的例子:
@Configurationpublic
class RoutingConfiguration {
@Bean
public RouterFunction<ServerResponse> monoRouterFunction(UserHandler userHandler) {
return route(GET("/{user}").and(accept(APPLICATION_JSON)), userHandler::getUser)
.andRoute(GET("/{user}/customers").and(accept(APPLICATION_JSON)), userHandler::getUserCustomers)
.andRoute(DELETE("/{user}").and(accept(APPLICATION_JSON)), userHandler::deleteUser);
}
}
@Componentpublic class UserHandler {
public Mono<ServerResponse> getUser(ServerRequest request) {
// ...
}
public Mono<ServerResponse> getUserCustomers(ServerRequest request) {
// ...
}
public Mono<ServerResponse> deleteUser(ServerRequest request) {
// ...
}
3:yml配置文件
server:
port: server-port
spring:
application:
name: server-name
cloud:
gateway:
discovery:
locator:
#这个就表示让 gateway 来自动代理服务注册中心上的服务 (在 bootstrap上添加中文注释会报错)
enabled: true
nacos:
discovery:
server-addr: nacos-host:nacos-port
management:
endpoints:
web:
exposure:
include: "*"
4:启动类注解
gatway启动类该注解来开启和服务注册中心的连接。
@EnableDiscoveryClient
。。。不加好像也可以。。。
5:调用流程
http://网关地址:端口/服务注册中心的serviceId/具体的url
例如:
http://127.0.0.1:9000【网关地址+端口】/nacos-provider【provider服务注册到服务中心的ID】/config/version 【provider服务中的具体接口地址】
http://127.0.0.1:9000/nacos-provider/config/version
1:外部http 请求网关
2:网关在注册中心查找到需要跳转的 服务
3:直接跳转到该服务 对应的接口
项目连接
请配合项目代码食用效果更佳:
项目地址:
https://github.com/hesuijin/spring-cloud-alibaba-project
Git下载地址:
https://github.com.cnpmjs.org/hesuijin/spring-cloud-alibaba-project.git
在gateway 模块下