之前的笔记里面学习了soul网关数据同步机制之websocket,soul网关还支持其他的数据同步方式,例如zookeeper、http长轮询。
大家熟知的http长轮询
是由ajax发起的,当服务器收到客户端发来的请求后,服务器端不会直接进行响应,而是先将这个请求挂起,然后判断服务器端数据是否有更新。如果有更新,则进行响应,如果一直没有数据,则到达一定的时间限制(服务器端设置)才返回。
soul网关里面的长轮询是不是传统的长轮询,本次就来学习一下soul网关是如何使用http长轮询来进行数据同步的。
在第一篇笔记里面已经梳理过soul网关源码的模块结构,知道了soul-sync-data-center
是数据同步相关的代码。我们就直接找到soul-sync-data-center/soul-sync-data-http
里面去看一下HttpSyncDataService.java
这个类。
先看一下HttpSyncDataService
是怎么被注入到spring容器的:
HttpSyncDataConfiguration
这个被@Configuration
注解的类里面,注入了HttpSyncDataService
这个bean。
@Bean
public SyncDataService httpSyncDataService(final ObjectProvider<HttpConfig> httpConfig, final ObjectProvider<PluginDataSubscriber> pluginSubscriber,
final ObjectProvider<List<MetaDataSubscriber>> metaSubscribers, final ObjectProvider<List<AuthDataSubscriber>> authSubscribers) {
log.info("you use http long pull sync soul data");
return new HttpSyncDataService(Objects.requireNonNull(httpConfig.getIfAvailable()), Objects.requireNonNull(pluginSubscriber.getIfAvail