微服务网关
一、创建模块service-gateway
1、创建模块
在srb下创建普通maven模块
Artifact:service-gateway
2、配置pom
在api-gateway的pom中添加如下依赖
代码语言:javascript复制<dependencies>
<!-- 网关 -->
<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>
</dependencies>
3、配置application.yml
代码语言:javascript复制server:
port: 80 # 服务端口
spring:
profiles:
active: dev # 环境设置
application:
name: service-gateway # 服务名
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服务地址
gateway:
discovery:
locator:
enabled: true # gateway可以发现nacos中的微服务,并自动生成转发路由
4、logback.xml
修改日志输出目录名为 gateway
5、创建启动类
代码语言:javascript复制@SpringBootApplication
@EnableDiscoveryClient
public class ServiceGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceGatewayApplication.class, args);
}
}
6、启动网关
注意:因为nginx和网关同时使用了80端口,因此先停止nginx,然后再启动网关
nginx.exe -s stop
二、路由配置
1、基本配置
application.yml文件中添加路由配置
代码语言:javascript复制#spring:
# cloud:
# gateway:
routes:
- id: service-core
uri: lb://service-core
predicates:
- Path=/*/core/**
- id: service-sms
uri: lb://service-sms
predicates:
- Path=/*/sms/**
- id: service-oss
uri: lb://service-oss
predicates:
- Path=/*/oss/**
三、跨域配置
1、配置文件
在 api-gateway中添加跨域配置
代码语言:javascript复制@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); //是否允许携带cookie
config.addAllowedOrigin("*"); //可接受的域,是一个具体域名或者*(代表任意域名)
config.addAllowedHeader("*"); //允许携带的头
config.addAllowedMethod("*"); //允许访问的方式
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}
2、删除后端跨域配置
删除微服务中的跨域注解 @CrossOrigin
今日bug
failed to req API:localhost:8848/nacos/v1/ns/instance. code:500 msg: java.net.ConnectException
解决 1、检查nacos有没有开启 2、检查nacos开启是否正常 3、nacos和eureka不一样,eureka是项目的一部分,nacos更像是合作伙伴的关系,新手容易忽略
如果nacos正常开启了,重新启动项目,还是不行 (1)检查注解@EnableDiscoveryClient (2)检查配置文件