搭建微服务的时候发现gateway网关一直注册无法注册进入nacos,导致其他服务一直报network error
先从依赖入手 ,可能有版本冲突 直接从阿里云docker部署nacos
接着排查web模块
<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>
接着在启动类发现没有添加 @EnableDiscoveryClient 还是无法注册
控制台报错 No service to register for nacos client
检查application.properties配置信息 无果
server.port=80
spring.application.name=service-gateway
# nacos
spring.cloud.nacos.discovery.server-addr=ip:8848
继续排查 可能是filter 关键 GlobalFilter出错
//判断是否为开放api,不是判断是否含有token 这里设置访问失败返回方法
@Configuration
public class GatewayGlobalFilter implements GlobalFilter, Ordered {
@Autowired
private ObjectMapper objectMapper;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String url = exchange.getRequest().getURI().getPath();
if (UrlOpenFilter.getWhiteList().contains(url)) {
return chain.filter(exchange);
}
ServerHttpResponse resp = exchange.getResponse();
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
// token为空
if (StringUtils.isEmpty(token)) {
return setUnauthorizedResponse(resp, "请登录");
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
private Mono<Void> setUnauthorizedResponse(ServerHttpResponse resp, String mess) {
resp.setStatusCode(HttpStatus.UNAUTHORIZED);
resp.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
BaseResult returnData = new BaseResult(401, mess, mess);
String returnStr = "";
try {
returnStr = objectMapper.writeValueAsString(returnData);
} catch (JsonProcessingException e) {
}
DataBuffer buffer = resp.bufferFactory().wrap(returnStr.getBytes(StandardCharsets.UTF_8));
return resp.writeWith(Flux.just(buffer));
}
}
还是不行 直接debug源码分析 发现还是配置文件的问题 获取不到spring.application.name
查看项目结构
发现target中没有加载到配置文件 设置resource文件夹mark directory as Resource ROOT
配置文件加载成功 nacos成功注册gateway