启动项目
修改两个配置文件,配置成htpp长轮询。不清楚的话可以先看我的第一篇
启动的时候得注意,先得启动soul-admin,然后再启动soul-bootstrap,要不然会报服务找不到。
源码分析
HttpLongPollingDataChangedListener这个类看名字就在知道是http长轮询数据改变的监听器,查看该类的uml图发现如图3所示。
![](https://i-blog.csdnimg.cn/blog_migrate/408114c662aa9ff9adadc04a3de281b5.png)
在调试过程中发现每隔一分钟就会调用HttpLongPollingDataChangedListener.compareChangedGroup这个方法。
private List<ConfigGroupEnum> compareChangedGroup(final HttpServletRequest request) {
List<ConfigGroupEnum> changedGroup = new ArrayList<>(4);
for (ConfigGroupEnum group : ConfigGroupEnum.values()) {
// md5,lastModifyTime
String[] params = StringUtils.split(request.getParameter(group.name()), ',');
if (params == null || params.length != 2) {
throw new SoulException("group param invalid:" + request.getParameter(group.name()));
}
String clientMd5 = params[0];
long clientModifyTime = NumberUtils.toLong(params[1]);
ConfigDataCache serverCache = CACHE.get(group.name());
// do check.
if (this.checkCacheDelayAndUpdate(serverCache, clientMd5, clientModifyTime)) {
changedGroup.add(group);
}
}
return changedGroup;
}
经过代码查阅发现LongPollingClient实现了Runnable的run接口,在run接口里使用的调度器,默认是60秒执行一次。
@Override
public void run() {
this.asyncTimeoutFuture = scheduler.schedule(() -> {
clients.remove(LongPollingClient.this);
List<ConfigGroupEnum> changedGroups = comp