gateway是什么?
gateway是springboot提供的一种网关系统,用于用前言判断的方法去判断他们的路径,从而调用相应路径的方法。
它与nginx的作用相似,不过nginx是需要在外部启动,在使用方面并没有Gateway来的方便。
接下来,介绍一下如何在springboot中进行使用?
首先我们需要创建一个模块,Gateway模块
第二步我们当然要添加依赖。
因为我们的 Gateway需要在nacos注册,所以我们有两个依赖需要加入。
<!--加入Gateway网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- 服务注册 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
第三部,我们需要在这个模块中的引导类的yml中的加入我们的配置
server:
port: 9000
spring:
application:
name: service_gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
gateway:
discovery:
locator:
enabled: true
routes: # 网关路由配置
- id: service-hosp # 路由 id,自定义,只要唯一即可
uri: lb://service-hosp #负载均衡
predicates:
- Path=/*/hosp/** #选择路径 以/user/..开头,路径断言#
- id: service-cmn
uri: lb://service-cmn
predicates:
- Path=/*/cmn/**
这里的写法如果有什么不明白可以去看我的另外一个博客微服务开发-------------搭建网关,断言工厂以及GatewayFilter路由过滤器
第四步我们需要创建引导类。
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class ServerGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ServerGatewayApplication.class,args);
}
}
这里的(exclude= {DataSourceAutoConfiguration.class})
它的用处是在于,如果出现在启动时会显示没有连接数据库时就加入它可以断开需要连接数据库的请求。这里的其他启动类与我们之前写的项目的启动类基本相同。
写到这里我们的Gateway的网关模块就写好了。
这里有几个问题需要介绍一下。
1.我在开发时遇到了启动时,一直爆错错误的情况是我的maven中的netty文件一直爆错。
经过我的疯狂找错,我发现了问题所在。
由于Spring Boot,Spring Cloud Gateway都带有spring-boot-starter-web依赖,但是前者使用Tomcat,后者使用Netty,会导致冲突,项目无法启动(这是我在一个同仁那里得到的解释)所以在父文件中注意千万不要把spring-boot-dependencies依赖加入。特别要注意。
2.另外一个就是跨域的问题,因为我们在使用时,一开始都是在我们的controller类中加我们
@CrossOrign的注解,它是用于跨域的问题,跨域指的就是我们的每个服务的端口号不一样当要同时使用时我们需要同时调用。
所以我们在我们的gateway模块中最好注入我们的一个新的config配置类进行全局的跨域,接下来我为大家写一个配置类,用于覆盖全局的跨域。
@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedMethod("*");
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}
到此我们的服务就完成了,快试一下你的前端是否能成功的启动吧,遇到什么问题可以在评论区讨论。