diff --git a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/config/BizConfig.java b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/config/BizConfig.java index 7ab69a2d342e7f98161e29e6e08a0962ec4c1c06..27cc546b4c6d764ecc83a3021265ff955628be45 100644 --- a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/config/BizConfig.java +++ b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/config/BizConfig.java @@ -27,6 +27,7 @@ public class BizConfig extends RefreshableConfig { private static final int DEFAULT_RELEASE_MESSAGE_SCAN_INTERVAL_IN_MS = 1000; //1000ms private static final int DEFAULT_RELEASE_MESSAGE_NOTIFICATION_BATCH = 100; private static final int DEFAULT_RELEASE_MESSAGE_NOTIFICATION_BATCH_INTERVAL_IN_MILLI = 100;//100ms + private static final int DEFAULT_LONG_POLLING_TIMEOUT = 60; //60s private Gson gson = new Gson(); private static final Type namespaceValueLengthOverrideTypeReference = @@ -58,6 +59,11 @@ public class BizConfig extends RefreshableConfig { return checkInt(interval, 1, Integer.MAX_VALUE, DEFAULT_GRAY_RELEASE_RULE_SCAN_INTERVAL); } + public long longPollingTimeout() { + int timeout = getIntProperty("long.polling.timeout", DEFAULT_LONG_POLLING_TIMEOUT); + return 1000 * checkInt(timeout, 1, Integer.MAX_VALUE, DEFAULT_LONG_POLLING_TIMEOUT); + } + public int itemKeyLengthLimit() { int limit = getIntProperty("item.key.length.limit", DEFAULT_ITEM_KEY_LENGTH); return checkInt(limit, 5, Integer.MAX_VALUE, DEFAULT_ITEM_KEY_LENGTH); @@ -146,4 +152,5 @@ public class BizConfig extends RefreshableConfig { } return defaultValue; } + } diff --git a/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/controller/NotificationControllerV2.java b/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/controller/NotificationControllerV2.java index 3ad2c68ba337fd2a25b92b128aa97686323487f3..02442b4079642f6ae3971432b49cf57666c42709 100644 --- a/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/controller/NotificationControllerV2.java +++ b/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/controller/NotificationControllerV2.java @@ -108,7 +108,7 @@ public class NotificationControllerV2 implements ReleaseMessageListener { throw new BadRequestException("Invalid format of notifications: " + notificationsAsString); } - DeferredResultWrapper deferredResultWrapper = new DeferredResultWrapper(); + DeferredResultWrapper deferredResultWrapper = new DeferredResultWrapper(bizConfig.longPollingTimeout()); Set namespaces = Sets.newHashSet(); Map clientSideNotifications = Maps.newHashMap(); Map filteredNotifications = filterNotifications(appId, notifications); diff --git a/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/wrapper/DeferredResultWrapper.java b/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/wrapper/DeferredResultWrapper.java index d03203983d99eb7dd32295277e70eb6688607ae2..942e28b49195a05ac668579f068b557c6ac87f6d 100644 --- a/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/wrapper/DeferredResultWrapper.java +++ b/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/wrapper/DeferredResultWrapper.java @@ -16,7 +16,6 @@ import java.util.Map; * @author Jason Song(song_s@ctrip.com) */ public class DeferredResultWrapper { - private static final long TIMEOUT = 60 * 1000;//60 seconds private static final ResponseEntity> NOT_MODIFIED_RESPONSE_LIST = new ResponseEntity<>(HttpStatus.NOT_MODIFIED); @@ -24,8 +23,8 @@ public class DeferredResultWrapper { private DeferredResult>> result; - public DeferredResultWrapper() { - result = new DeferredResult<>(TIMEOUT, NOT_MODIFIED_RESPONSE_LIST); + public DeferredResultWrapper(long timeout) { + result = new DeferredResult<>(timeout, NOT_MODIFIED_RESPONSE_LIST); } public void recordNamespaceNameNormalizedResult(String originalNamespaceName, String normalizedNamespaceName) {