soul 网关入门篇(七):数据同步方式- nacos 配置

前言

上回说到, 同步数据有不同的策略。如果一个 admin 配置多个同步方式那么 soul-web 会选哪个呢?还是一个 admin 只能配置一个同步策略呢?

配置多个同步策略

配置多个同步策略时,需要 zookeeper 和 nacos 两个服务。这里使用 docker 安装即可。详情点击: zookeeper docker 安装nacaos 安装,根据提示检测是否成功。

成功后我们 soul-admin 后台配置。

soul:
  sync:
    websocket:
      enabled: true
      zookeeper:
          url: localhost:2181
          sessionTimeout: 5000
          connectionTimeout: 2000
      http:
        enabled: true
      nacos:
        url: localhost:8848
        namespace: 1c10d748-af86-43b9-8265-75f487d20c6c
        acm:
          enabled: false
          endpoint: acm.aliyun.com
          namespace:
          accessKey:
          secretKey:

重新启动 admin, 将 soul-bootstrap 修改如下

soul :
    sync:
        websocket :
             urls: ws://localhost:9095/websocket
        zookeeper:
             url: localhost:2181
             sessionTimeout: 5000
             connectionTimeout: 2000
#  这里先注释掉,bootstrap http 和 webscoket 会报错,下面会解释原因
#        http:
#             url : http://localhost:9095
        nacos:
              url: localhost:8848
              namespace: 1c10d748-af86-43b9-8265-75f487d20c6c
              acm:
                enabled: false
                endpoint: acm.aliyun.com
                namespace:
                accessKey:
                secretKey:

然后检查 pom 文件相关包是否引入:

<!--soul data sync start use zookeeper-->
        <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-sync-data-zookeeper</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!--soul data sync start use websocket-->
        <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-sync-data-websocket</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!--soul data sync start use http-->
        <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-sync-data-http</artifactId>
            <version>${project.version}</version>
        </dependency>

    <!-- soul data sync start use nacos-->
        <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-sync-data-http</artifactId>
            <version>${project.version}</version>
        </dependency>

没有引入的话,自行引入即可,重新启动 bootstrap。从命令行看出

2021-01-21 18:59:34.263  INFO 6334 --- [           main] s.b.s.d.z.ZookeeperSyncDataConfiguration : you use zookeeper sync soul data.......
...
2021-01-21 18:59:34.395  INFO 6334 --- [           main] b.s.s.d.w.WebsocketSyncDataConfiguration : you use websocket sync soul data.......
2021-01-21 18:59:34.441  INFO 6334 --- [           main] d.s.s.s.s.d.n.NacosSyncDataConfiguration : you use nacos sync soul data.......
2021-01-21 18:59:34.851  WARN 6334 --- [           main] onfigReactiveWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nacosSyncDataService' defined in class path resource [org/dromara/soul/springboot/starter/sync/data/nacos/NacosSyncDataConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.dromara.soul.sync.data.api.SyncDataService]: Factory method 'nacosSyncDataService' threw exception; nested exception is java.lang.NullPointerException
2021-01-21 18:59:34.853  INFO 6334 --- [-localhost:2181] org.I0Itec.zkclient.ZkEventThread        : Terminate ZkClient event thread.
2021-01-21 18:59:34.970  INFO 6334 --- [           main] org.apache.zookeeper.ZooKeeper           : Session: 0x10001d80adf0007 closed
2021-01-21 18:59:34.970  INFO 6334 --- [ain-EventThread] org.apache.zookeeper.ClientCnxn          : EventThread shut down for session: 0x10001d80adf0007
2021-01-21 18:59:34.982  INFO 6334 --- [           main] ConditionEvaluationReportLoggingListener : 

Debug

判断是否是 nacos 的配置有误。按照上述流程,注释掉其他的策略,只留 nacos,配置好重启。
发现还是报错, 经过调试发现:


configInfo

现在在 soul 上提了一个 issue ,有可能是个bug,但也有可能是我配置 nacos 的问题。

解决办法

  1. 确保是否是 Nacos 的配置问题。
  2. 登录 admin 后台,在以下菜单上配置好信息,然后同步到 nacos 上,


    需要同步数据的菜单

    看看 nacos 上是否有信息。
    配置权限的时候,需要在列表处,打上勾,不然会无法传输


    权限配置
  3. 检查 nacos 是否都有以下参数


    nacos 检查
  4. 启动 soul 网关, 出现以下则配置成功
2021-01-22 09:55:36.837  INFO 8210 --- [           main] d.s.s.s.s.d.n.NacosSyncDataConfiguration : you use nacos sync soul data.......
2021-01-22 09:55:37.197  INFO 8210 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2021-01-22 09:55:37.756  INFO 8210 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 9195
2021-01-22 09:55:37.760  INFO 8210 --- [           main] o.d.s.b.SoulBootstrapApplication         : Started SoulBootstrapApplication in 3.625 seconds

总结

  1. 调试的时候,如果发现问题,可以先把身边用过的人问问是否会出现这种情况,是个例还是通性问题。
  2. 如果是通性问题,可以去社区,或者 github 上直接提 issue 问清楚。不要害怕写英语,其实大家水平都差不多。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容