数据同步方式
-
long polling同步配置数据:
代码实现比较简单,易于维护,long polling会大量占用连接池的资源,影响系统的并发数 -
zookeeper同步配置数据
使用zookeeper同步机制也是非常好的,时效性也高,但是也要处理zk环境不稳定,集群脑裂等问题. 如果zookeeper已经在当前系统中广泛使用,那用它作为同步机制是个很好的选择。否则增加一个新的外部依赖也是一个需要考量的点。 -
nacos同步配置数据
阿里的nacos功能非常强大,可以同时作为注册中心和配置中心, 但是使用它来同步配置数据有点太heavy了。和zookeeper一样,如果nacos已经在当前系统中使用,那用它作为同步的机制是个很好的选择。 -
websocket同步配置数据
特点: WebSocket对比http long poll节省系统资源,对比使用zookeeper少了一个系统依赖。所以它是soul的默认选项
配置
配置上需要加上不同的同步机制的starter
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-sync-data-xxx</artifactId>
<version>${
last.version}</version>
</dependency>
在网关和soul-admin上需要增加对应的参数,这里就不再赘述了
使用配置数据的订阅
websocket
以websocket为例,WebsocketSyncDataService建立和client的连接和断开重连
String[] urls = StringUtils.split(websocketConfig.getUrls(), ",");
executor = new ScheduledThreadPoolExecutor(urls.length, SoulThreadFactory.create("websocket-connect", true));
for (String url : urls) {
try {
clients.add(new SoulWebsocketClient(new URI(url), Objects.requireNonNull(pluginDataSubscriber), metaDataSubscribers, authDataSubscribers));
} catch (URISyntaxException e