背景
在搭建微服务框架的时候使用的Gateway网关,网关通了,但是在调用服务的时候报了异常。
SERVICE_UNAVAILABLE "Unable to find instance for admin-auth"
相关配置
admin-gateway.yml 依赖
<dependencies>
<!-- 原因:该版本SpringCloud不再默认优先加载bootstrap.yml文件,解决办法:添加spring-cloud-starter-bootstrap依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- SpringCloud Gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel Gateway -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
<!-- Sentinel Datasource Nacos -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
</dependencies>
配置
server:
port: 10010
spring:
application:
name: @artifactId@
cloud:
nacos:
server-addr: 127.0.0.1:8848 # nacos地址
gateway:
discovery:
locator:
enabled: true
routes:
- id: admin-auth # 路由标识,必须唯一
uri: lb://admin-auth # 路由的目标地址,lb为load balance,负载均衡
predicates: # 路由断言,判断请求是否符合规则
- Path=/admin-auth/** # 判断请求是否以/user开头
解决
因为Gateway底层使用了Ribbon作为负载均衡,依赖中没有加入相关的组件,所以不可以进行正确的分发。加入即可:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>