soul网关源码解析-数据同步-weboscket同步

本文详细解析了Soul网关的数据同步机制,重点介绍了WebSocket的配置和原理。在启动过程中,网关与管理后台通过WebSocket建立连接,接收全量及增量配置数据。通过分析日志和源码,特别是`WebsocketSyncDataConfiguration`和`WebsocketCollector`类,揭示了数据同步的关键步骤,包括启动时的全量加载和后续变更事件的推送过程。
摘要由CSDN通过智能技术生成


配置

  1. 引入pom文件
<dependency>
     <groupId>org.dromara</groupId>
     <artifactId>soul-spring-boot-starter-sync-data-websocket</artifactId>
     <version>${last.version}</version>
   </dependency>
  1. yml文件配置
soul :
    sync:
        websocket :
             urls: ws://localhost:9095/websocket

如果admin地址有多个使用逗号分割

weboscket原理

网关与 管理后台建立好 websocket 连接时,admin 会推送一次全量数据,后续如果配置数据发生变更,则将增量数据通过 websocket 主动推送给 soul-web

数据如何同步

日志

我们看下启动是否有相关的日志*()

2021-01-20 23:21:29.742  INFO 23508 --- [           main] o.d.s.b.SoulBootstrapApplication         : Starting SoulBootstrapApplication on YS-20200423USJU with PID 23508 (E:\opensource\soul\soul-bootstrap\target\classes started by Tao.Huang in E:\opensource\soul)
2021-01-20 23:21:29.742  INFO 23508 --- [           main] o.d.s.b.SoulBootstrapApplication         : The following profiles are active: local
2021-01-20 23:21:30.824  INFO 23508 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2021-01-20 23:21:30.828  INFO 23508 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2021-01-20 23:21:30.871  INFO 23508 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 17ms. Found 0 Redis repository interfaces.
2021-01-20 23:21:31.804  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[global] [org.dromara.soul.plugin.global.GlobalPlugin]
2021-01-20 23:21:31.804  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[sign] [org.dromara.soul.plugin.sign.SignPlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[waf] [org.dromara.soul.plugin.waf.WafPlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[rate_limiter] [org.dromara.soul.plugin.ratelimiter.RateLimiterPlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[hystrix] [org.dromara.soul.plugin.hystrix.HystrixPlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[resilience4j] [org.dromara.soul.plugin.resilience4j.Resilience4JPlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[divide] [org.dromara.soul.plugin.divide.DividePlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[webClient] [org.dromara.soul.plugin.httpclient.WebClientPlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[divide] [org.dromara.soul.plugin.divide.websocket.WebSocketPlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[alibaba-dubbo-body-param] [org.dromara.soul.plugin.alibaba.dubbo.param.BodyParamPlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[dubbo] [org.dromara.soul.plugin.alibaba.dubbo.AlibabaDubboPlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[monitor] [org.dromara.soul.plugin.monitor.MonitorPlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[response] [org.dromara.soul.plugin.httpclient.response.WebClientResponsePlugin]
2021-01-20 23:21:31.805  INFO 23508 --- [           main] o.d.s.w.configuration.SoulConfiguration  : load plugin:[response] [org.dromara.soul.plugin.alibaba.dubbo.response.DubboResponsePlugin]
2021-01-20 23:21:32.025  INFO 23508 --- [           main] b.s.s.d.w.WebsocketSyncDataConfiguration : you use websocket sync soul data.......
2021-01-20 23:21:32.225  INFO 23508 --- [           main] o.d.s.p.s.d.w.WebsocketSyncDataService   : websocket connection is successful.....
2021-01-20 23:21:32.306  INFO 23508 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2021-01-20 23:21:33.457  INFO 23508 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 9195
2021-01-20 23:21:33.460  INFO 23508 --- [           main] o.d.s.b.SoulBootstrapApplication         : Started SoulBootstrapApplication in 4.287 seconds (JVM running for 5.599)

我们可以看到在启动日志中除了加载插件的日志还有2条是这样的

you use websocket sync soul data.......
websocket connection is successful.....

我们现在代码中找到相关的打个断点看下相关的代码

源码

soul-spring-boot-starter-sync-data-websocket

通过日志我们知道这个日志在 WebsocketSyncDataConfiguration 类中

  @Bean
    public SyncDataService websocketSyncDataService(final ObjectProvider<WebsocketConfig> websocketConfig, final ObjectProvider<PluginDataSubscriber> pluginSubscriber,
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值