本文介绍了 Soul 网关框架中 SpringCloud 插件的使用,并分析了 SpringCloud 插件模块的部分源码。
背景
Soul 网关框架内置丰富的插件支持,其中 SpringCloud 插件用于将客户端的 http 请求转换为 SpringCloud 请求。
SpringCloud 插件的使用
- 启动 nacos (这里使用 nacos 作为 SpringCloud 的注册中心,nacos 版本 1.2.0);
sh startup.sh -m standalone复制代码
启动 soul-admin 应用,在管理后台开启对 SpringCloud 插件的支持;
soul-bootstrap 网关应用中增加对 SpringCloud 的依赖,并配置 nacos 注册中心,启动应用;
<dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-starter-plugin-springcloud</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> <version>2.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.2.0.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.0.RELEASE</version> </dependency>复制代码
cloud: nacos: discovery: server-addr: 127.0.0.1:8848复制代码
登录http://localhost:8848/nacos/#/login查看 soul-bootstrap 是否注册到 nacos;
在后端测试服务 soul-examples-springcloud 中配置 nacos 注册中心地址和 nacos 客户端依赖,然后启动应用,查看网关管理后台可以看到注册的后端服务列表;
测试 http 请求,可以正常转发至后端 SpringCloud 服务;
问题总结
- soul-bootstrap 启动失败
ERROR 45890 --- [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, soul-bootstrap register failed...NacosRegistration{nacosDiscoveryProperties=NacosDiscoveryProperties{serverAddr='', endpoint='', namespace='', watchDelay=30000, logName='', service='soul-bootstrap', weight=1.0, clusterName='DEFAULT', namingLoadCacheAtStart='false', metadata={preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip='192.168.1.5', networkInterface='', port=9195, secure=false, accessKey='', secretKey=''}}, java.lang.IllegalArgumentException: no server available at com.alibaba.nacos.client.naming.net.NamingProxy.reqAPI(NamingProxy.java:438) ~[nacos-client-1.1.1.jar:na] at com.alibaba.nacos.client.naming.net.NamingProxy.reqAPI(NamingProxy.java:386) ~[nacos-client-1.1.1.jar:na] at com.alibaba.nacos.client.naming.net.NamingProxy.registerService(NamingProxy.java:188) ~[nacos-client-1.1.1.jar:na]复制代码
- 解决:soul-bootstrap 中配置 nacos 注册中心地址;