这篇文章是接上一篇文章(SpringCloud与Nacos动态路由),继续编写的问题解决方案。
(2) Unable to find instance for bigdata
在我第一次创建网关的时候,可以使用lb协议,但是等我第二次再重新创建一个新的模块的时候,无论如何都搞不定了。显示找不到实例
改了几次名字之后,还是不行。为什么同样的代码就是无法找到实例了呢?还有一个奇怪的就是当我只使用gateway.discovery.locator.enabled=true配置,直接使用服务名进行路由的时候,却是能找到这个名字的微服务的。
解决方法:主要是要添加gateway.discovery.locator.enabled=false属性,然后再配置路由解析。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| server: port: 7004 spring: application: name: test cloud: nacos: discovery: server-addr: 127.0.0.1:8848 ip: 127.0.0.1 gateway: discovery: locator: enabled: false routes: - id: url-proxy-1 uri: lb://bigdata predicates: - Path=/lsmfhx/bigdata/** filters: - StripPrefix=1
|
奇怪的事情发生了,当我把这段代码删掉之后,或者是复制到另一个项目中的时候,另一项目还是会出现503错误,而这个项目已经运行起来的,还是可以继续运行,即使删掉代码,执行了mvn clean package ,还是能找到服务名。这是缓存吗?不能执行的那个程序,无论怎么改程序,都是返回404错误。
简直令人抓狂和无可奈何啊,在另一个项目中gateway.discovery.locator.enabled=true这个好像也不管事了。
时隔两天后,我再次修改代码,基本上没怎么变化的,就是动态路由的json参数发生了变化,写成了如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [ { "id": "lsmfhx-phemsjava", "order": 1, "predicates": [{ "args": { "pattern": "/lsmfhx/bigdata/searchHistoryAll" }, "name": "Path" }], "filters":[{ "name":"StripPrefix", "args":{ "_genkey_0":1 } }], "uri": "lb://bigdata" } ]
|
主要的问题到底出在那里,这个test工程为什么可以,而另一个同样差不多代码的工程,就不行呢?
经过重复实验和另开应用程序,我发现了可能是pom的问题。
1.pom.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> </parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>test</artifactId> <packaging>jar</packaging> <description>网关</description>
<properties> <java.version>1.8</java.version> </properties>
<dependencyManagement>
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency>
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>0.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.1.0.RELEASE</version> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> </plugin> </plugins> </build>
</project>
|
错误的pom.xml,是只引入了下面两个依赖,缺少了spring-cloud-starter-alibaba-nacos-discovery依赖
1 2 3 4 5 6 7 8 9 10 11
| <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-config</artifactId> <version>2.1.0.RELEASE</version> </dependency> </dependencies>
|
2.配置文件application.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| server: port: 7006 spring: application: name: gateway cloud: nacos: discovery: server-addr: 127.0.0.1:8848 ip: 127.0.0.1 nacos: config: server-addr: 127.0.0.1:8848 group: DEFAULT_GROUP file-extension: json data-id: route-list
|
3.bootstrap.properties配置文件
1
| spring.cloud.nacos.config.server-addr=127.0.0.1:8848
|
这样就再加上(SpringCloud与Nacos动态路由二)文章中,添加的NacosGatewayDefineConfig、NacosDynamicRouteService以及NacosDynamicRouteServiceImpl 三个类,就构成了完整的nacos作为配置中心,加上gateway做网关的动态路由解决方案。代码地址