本文介绍了 Soul 网关框架中 SpringCloud 插件的使用,并分析了 SpringCloud 插件模块的部分源码。

背景

Soul 网关框架内置丰富的插件支持,其中 SpringCloud 插件用于将客户端的 http 请求转换为 SpringCloud 请求。

SpringCloud 插件的使用

  • 启动 nacos (这里使用 nacos 作为 SpringCloud 的注册中心,nacos 版本 1.2.0);
sh startup.sh -m standalone复制代码
  • 启动 soul-admin 应用,在管理后台开启对 SpringCloud 插件的支持;

    Soul 源码学习【5】- SpringCloud 插件_Soul

  • 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 源码学习【5】- SpringCloud 插件_Soul_02

  • 在后端测试服务 soul-examples-springcloud 中配置 nacos 注册中心地址和 nacos 客户端依赖,然后启动应用,查看网关管理后台可以看到注册的后端服务列表;

    Soul 源码学习【5】- SpringCloud 插件_SpringCloud _03

  • 测试 http 请求,可以正常转发至后端 SpringCloud 服务;

    Soul 源码学习【5】- SpringCloud 插件_SpringCloud _04

问题总结

  1. 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 注册中心地址;