SpringCloud Gateway + nacos 报错 Service Unavailable
问题描述:使用spring的gatway,将gateway搭建好并成功注册到nacos中,但通过gatway却无法路由到其他服务,每次都报错There was an unexpected error (type=Service Unavailable, status=503)。
gatway服务的依赖:
<dependencies> <!--导入网关的jar包--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!--网关也需要注册到nacos/eureka来拉取服务--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
gatway服务的配置:
server: port: 12000 # gateway server 运行的端口 spring: application: name: gateway # 此服务的名称(注册到注册中心用) cloud: nacos: server-addr: localhost:8848 # 注册到的nacos地址 gateway: routes: # 网关路由配置 - id: user-service # 路由id,自定义,只要唯一即可 uri: lb://user-service # 路由的目标地址 lb就是负载均衡,后面跟服务名称 predicates: # 路由断言,也就是判断请求是否符合路由规则的条件 - Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求 - id: order-service uri: lb://order-service predicates: - Path=/order/**
问题解决:这是由于版本不兼容引发的问题,我当前使用的springcloud alibaba版本为2021.0.1.0,而springcloud alibaba在2020版之后不支持ribbon,而springcloud gateway使用ribbon,就导致了gateway无法路由到目标服务,这里可以使用loadbalancer代替,然后在配置文件中禁用ribbon,修改后的配置与依赖如下:
<dependencies> <!--导入网关的jar包--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!--网关也需要注册到nacos/eureka来拉取服务--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--alibaba在2020版之后不使用ribbon,这里使用loadbalancer代替,然后在配置文件中禁用ribbon--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> </dependencies>
server: port: 12000 # gateway server 运行的端口 spring: application: name: gateway # 此服务的名称(注册到注册中心用) cloud: nacos: server-addr: localhost:8848 # 注册到的nacos地址 # alibaba在2020版之后不使用ribbon,这里使用loadbalancer代替,在配置文件中禁用ribbon loadbalander: ribbon: enable: false gateway: routes: # 网关路由配置 - id: user-service # 路由id,自定义,只要唯一即可 uri: lb://user-service # 路由的目标地址 lb就是负载均衡,后面跟服务名称 predicates: # 路由断言,也就是判断请求是否符合路由规则的条件 - Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求 - id: order-service uri: lb://order-service predicates: - Path=/order/**
下一篇:
五年会计,转行程序员,开启ios之路