private void doLongPolling(final String server) {
        MultiValueMap<String, String> params = new LinkedMultiValueMap<>(8);
        for (ConfigGroupEnum group : ConfigGroupEnum.values()) {
            ConfigData<?> cacheConfig = factory.cacheConfigData(group);
            if (Objects.nonNull(cacheConfig)) {
                String value = String.join(",", cacheConfig.getMd5(), String.valueOf(cacheConfig.getLastModifyTime()));
                params.put(group.name(), Lists.newArrayList(value));
            }
        }
        params.put("namespaceId", Lists.newArrayList(shenyuConfig.getNamespace()));
        LOG.debug("listener params: [{}]", params);
        Headers headers = new Headers.Builder()
                .add(Constants.X_ACCESS_TOKEN, this.accessTokenManager.getAccessToken())
                .add("Content-Type", "application/x-www-form-urlencoded")
                .build();
        String listenerUrl = server + Constants.SHENYU_ADMIN_PATH_CONFIGS_LISTENER;
        String uri = UriComponentsBuilder.fromHttpUrl(listenerUrl).queryParams(params).build(true).toUriString();
        Request request = new Request.Builder()
                .url(uri)
                .headers(headers)
                .post(RequestBody.create("", null))
                .build();

        JsonArray groupJson;
        try (Response response = okHttpClient.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                String message = String.format("listener configs fail, server:[%s], http status code[%s]", server, response.code());
                throw new ShenyuException(message);
            }
            ResponseBody responseBody = response.body();
            Assert.notNull(responseBody, "Resolve response body failed.");
            String json = responseBody.string();
            LOG.info("listener result: [{}]", json);
            JsonObject responseFromServer = GsonUtils.getGson().fromJson(json, JsonObject.class);
            JsonElement element = responseFromServer.get("data");
            if (element.isJsonNull()) {
                return;
            }
            groupJson = responseFromServer.getAsJsonArray("data");
        } catch (IOException e) {
            String message = String.format("listener configs fail, server:[%s], %s", server, e.getMessage());
            throw new ShenyuException(message, e);
        }

        if (Objects.nonNull(groupJson) && !groupJson.isEmpty()) {
            // fetch group configuration async.
            ConfigGroupEnum[] changedGroups = GsonUtils.getGson().fromJson(groupJson, ConfigGroupEnum[].class);
            LOG.info("Group config changed: {}", Arrays.toString(changedGroups));
            this.doFetchGroupConfig(server, changedGroups);
        }
    }
update local cache.

@param json the response from config server.
@return true: the local cache was updated. false: not updated.
shenyu-sync-data-center/shenyu-sync-data-http/src/main/java/org/apache/shenyu/sync/data/http/HttpSyncDataService.java