一、微服务网关
1、创建模块
创建普通 maven 模块
Artifact:service-gateway
2、配置 pom
pom 中添加如下依赖
1 2 3 4 5 6 7 8 9 10
| <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>
|
3、配置 application.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| server: port: 80
spring: profiles: active: dev application: name: service-gateway cloud: nacos: discovery: server-addr: 192.168.200.8:8848 gateway: discovery: locator: enabled: true
|
4、创建启动类
1 2 3 4 5 6 7 8
| @SpringBootApplication @EnableDiscoveryClient public class ServiceGatewayApplication {
public static void main(String[] args) { SpringApplication.run(ServiceGatewayApplication.class, args); } }
|
关于@EnableDiscoveryClient 注解:
@EnableEurekaClient
或者 @EnableDiscoveryClient
,都是用于开启客户端发现功能
区别在于@EnableEurekaClient
的注册中心只能是 Eureka。
5、启动网关
启动 ServiceGatewayApplication
,测试自动生成的转发路由
规则
htttp://网关地址:网关端口/需要访问的微服务名称/路由地址
上面网关的端口是 80,默认 80 端口可以省略
假设有一个微服务名:service-core
,其中一个 api 接口地址为 /admin/core/integralGrade/list
,则使用路由访问的地址为
http://localhost/service-core/admin/core/integralGrade/list
二、配置动态路由
1、基本配置
application.yml 文件中添加路由配置
解析:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
routes: - id: service-core uri: lb://service-core predicates: - Path=/*/core/**
|
路由配置中uri
所用的协议为lb
时,gateway
将把 service-core
解析为实际的主机和端口,并自动进行负载均衡
1 2 3 4 5 6 7 8
|
routes: - id: service-core uri: lb://service-core predicates: - Path=/*/core/**
|
2、测试路由转发
原来自动路由访问的地址:http://localhost/service-core/admin/core/integralGrade/list
现在配置了动态路由后访问的地址:http://localhost/admin/core/integralGrade/list
三、跨域配置
原来的跨域配置是通过 Nginx 配置添加跨域注解 @CrossOrigin
来解决的,现在通过路由网关来解决跨域问题
添加跨域配置的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @Configuration public class CorsConfig { @Bean public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source); } }
|