问题背景
SpringCloud Gateway的使用介绍,本文不再赘述,这里仅记录个人使用SpringCloud Gateway过程中所遇到的坑,给各位靓仔提供一个参考
项目背景:
1 向注册中心Nacos注册了名称为providers:com.demo.service.DemoService的服务
2 SpringCloud Gateway配置LB
gateway:
routes:
- id: provider-test-one
uri: lb://providers:com.demo.service.DemoService
predicates:
- Path=/provider-test/**
3 浏览器访问 http://localhost:9999/provider-test/discovery/one 一直失败,请求未路由到对应服务器上,如图
解决方案
将Nacos注册的服务名providers:com.demo.service.DemoService 改成一个 正常的没毛病的名字,如nacos-main 即可
简单来说: gateway lb的配置有一定的约束规范,providers:com.demo.service.DemoService这种是不符合规范的,所以gateway路由失败,将注册名称改成正常的如 nacos-main 即可,如图
解决过程记录
1 为什么向nacos注册服务名是providers:com.demo.service.DemoService 这样的,而不是项目中配置的 spring.application.name=test 这种自定义的名称
因为历史原因,我这个项目是dubbo+nacos的形式,选用的是dubbo,而不是cloud自带的ribbon (ribbon feign dubbo 通俗来说是用来rpc通讯的)
dubbo注册服务名,是有自己的一套规则的,无论我dubbo.xml怎么配置,这个屌规则命名依旧是这样...
导致gateway那边不符合LB规范
2 nacos-main这个服务名是怎么注册的
:这个是在下直接用springboot+nacos直接简单搭建的,其中这个服务名直接配置spring.application.name=nacos-main即可
LB动态路由演示
1 启动7000,7001两个实例,向nacos注册 nacos-main的服务
2 配置springCloud Gateway
gateway:
routes:
- id: provider-test-one
uri: lb://nacos-main
predicates:
- Path=/provider-test/**
3 请求测试 http://localhost:9999/provider-test/discovery/one
看看这个请求是否负载均衡的打到 7000,7001两个实例上
实验成功
写在后面
本文所演示的SpringCloud Gateway + Nacos功能以及LB负载均衡演示Demo
各位靓仔可以在此处下载源码作为参考