diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java index 7f679fec2af..26cfac16df7 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java @@ -19,7 +19,6 @@ import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.common.utils.Objects; -import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.naming.cluster.ServerStatus; import com.alibaba.nacos.naming.cluster.transport.Serializer; import com.alibaba.nacos.consistency.DataOperation; @@ -28,16 +27,10 @@ import com.alibaba.nacos.naming.consistency.RecordListener; import com.alibaba.nacos.naming.consistency.ephemeral.EphemeralConsistencyService; import com.alibaba.nacos.naming.consistency.ephemeral.distro.combined.DistroHttpCombinedKey; -import com.alibaba.nacos.naming.consistency.ephemeral.distro.combined.DistroHttpCombinedKeyTaskFailedHandler; -import com.alibaba.nacos.naming.consistency.ephemeral.distro.combined.DistroHttpDelayTaskProcessor; -import com.alibaba.nacos.naming.consistency.ephemeral.distro.component.DistroDataStorageImpl; -import com.alibaba.nacos.naming.consistency.ephemeral.distro.component.DistroHttpAgent; import com.alibaba.nacos.core.distributed.distro.DistroProtocol; -import com.alibaba.nacos.core.distributed.distro.component.DistroComponentHolder; import com.alibaba.nacos.core.distributed.distro.component.DistroDataProcessor; import com.alibaba.nacos.core.distributed.distro.entity.DistroData; import com.alibaba.nacos.core.distributed.distro.entity.DistroKey; -import com.alibaba.nacos.core.distributed.distro.task.DistroTaskEngineHolder; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.core.Instances; import com.alibaba.nacos.naming.core.Service; @@ -102,20 +95,6 @@ public DistroConsistencyServiceImpl(DistroMapper distroMapper, DataStore dataSto this.switchDomain = switchDomain; this.globalConfig = globalConfig; this.distroProtocol = distroProtocol; - registerDistroComponent(); - } - - private void registerDistroComponent() { - DistroComponentHolder componentHolder = ApplicationUtils.getBean(DistroComponentHolder.class); - DistroTaskEngineHolder taskEngineHolder = ApplicationUtils.getBean(DistroTaskEngineHolder.class); - componentHolder.registerDataStorage(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, - new DistroDataStorageImpl(dataStore, distroMapper)); - componentHolder.registerTransportAgent(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, new DistroHttpAgent()); - componentHolder.registerFailedTaskHandler(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, - new DistroHttpCombinedKeyTaskFailedHandler(globalConfig, taskEngineHolder)); - taskEngineHolder.registerNacosTaskProcessor(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, - new DistroHttpDelayTaskProcessor(globalConfig, taskEngineHolder)); - componentHolder.registerDataProcessor(this); } @PostConstruct diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpData.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpData.java index 7f22ed4d379..314770313af 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpData.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpData.java @@ -33,8 +33,8 @@ public class DistroHttpData extends DistroData { private Object deserializedContent; - public DistroHttpData(DistroKey distroKey, byte[] content, Object deserializedContent) { - super(distroKey, content); + public DistroHttpData(DistroKey distroKey, Object deserializedContent) { + setDistroKey(distroKey); this.deserializedContent = deserializedContent; } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpRegistry.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpRegistry.java new file mode 100644 index 00000000000..16c81fdab9a --- /dev/null +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpRegistry.java @@ -0,0 +1,77 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.nacos.naming.consistency.ephemeral.distro; + +import com.alibaba.nacos.core.distributed.distro.component.DistroComponentHolder; +import com.alibaba.nacos.core.distributed.distro.task.DistroTaskEngineHolder; +import com.alibaba.nacos.naming.consistency.KeyBuilder; +import com.alibaba.nacos.naming.consistency.ephemeral.distro.combined.DistroHttpCombinedKeyTaskFailedHandler; +import com.alibaba.nacos.naming.consistency.ephemeral.distro.combined.DistroHttpDelayTaskProcessor; +import com.alibaba.nacos.naming.consistency.ephemeral.distro.component.DistroDataStorageImpl; +import com.alibaba.nacos.naming.consistency.ephemeral.distro.component.DistroHttpAgent; +import com.alibaba.nacos.naming.core.DistroMapper; +import com.alibaba.nacos.naming.misc.GlobalConfig; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * Distro http registry. + * + * @author xiweng.yy + */ +@Component +public class DistroHttpRegistry { + + private final DistroComponentHolder componentHolder; + + private final DistroTaskEngineHolder taskEngineHolder; + + private final DataStore dataStore; + + private final DistroMapper distroMapper; + + private final GlobalConfig globalConfig; + + private final DistroConsistencyServiceImpl consistencyService; + + public DistroHttpRegistry(DistroComponentHolder componentHolder, DistroTaskEngineHolder taskEngineHolder, + DataStore dataStore, DistroMapper distroMapper, GlobalConfig globalConfig, + DistroConsistencyServiceImpl consistencyService) { + this.componentHolder = componentHolder; + this.taskEngineHolder = taskEngineHolder; + this.dataStore = dataStore; + this.distroMapper = distroMapper; + this.globalConfig = globalConfig; + this.consistencyService = consistencyService; + } + + /** + * Register necessary component to distro protocol for HTTP implement. + */ + @PostConstruct + public void doRegister() { + componentHolder.registerDataStorage(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, + new DistroDataStorageImpl(dataStore, distroMapper)); + componentHolder.registerTransportAgent(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, new DistroHttpAgent()); + componentHolder.registerFailedTaskHandler(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, + new DistroHttpCombinedKeyTaskFailedHandler(globalConfig, taskEngineHolder)); + taskEngineHolder.registerNacosTaskProcessor(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, + new DistroHttpDelayTaskProcessor(globalConfig, taskEngineHolder)); + componentHolder.registerDataProcessor(consistencyService); + } +} diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java index b1e89d92b28..7052b71a1fc 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java @@ -84,8 +84,7 @@ public ResponseEntity onSyncDatum(@RequestBody Map<String, Datum<Instances>> dat .isDefaultInstanceEphemeral()) { serviceManager.createEmptyService(namespaceId, serviceName, true); } - DistroHttpData distroHttpData = new DistroHttpData(createDistroKey(entry.getKey()), null, - entry.getValue()); + DistroHttpData distroHttpData = new DistroHttpData(createDistroKey(entry.getKey()), entry.getValue()); distroProtocol.onReceive(distroHttpData); } } @@ -101,7 +100,7 @@ public ResponseEntity onSyncDatum(@RequestBody Map<String, Datum<Instances>> dat */ @PutMapping("/checksum") public ResponseEntity syncChecksum(@RequestParam String source, @RequestBody Map<String, String> dataMap) { - DistroHttpData distroHttpData = new DistroHttpData(createDistroKey(source), null, dataMap); + DistroHttpData distroHttpData = new DistroHttpData(createDistroKey(source), dataMap); distroProtocol.onVerify(distroHttpData); return ResponseEntity.ok("ok"); } diff --git a/naming/src/test/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImplTest.java b/naming/src/test/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImplTest.java index ffaa82a05f4..4a76dc1b444 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImplTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImplTest.java @@ -24,9 +24,7 @@ import com.alibaba.nacos.naming.consistency.KeyBuilder; import com.alibaba.nacos.naming.consistency.RecordListener; import com.alibaba.nacos.core.distributed.distro.DistroProtocol; -import com.alibaba.nacos.core.distributed.distro.component.DistroComponentHolder; import com.alibaba.nacos.core.distributed.distro.entity.DistroKey; -import com.alibaba.nacos.core.distributed.distro.task.DistroTaskEngineHolder; import com.alibaba.nacos.naming.core.Instances; import com.alibaba.nacos.naming.misc.GlobalConfig; import org.junit.After; @@ -41,7 +39,6 @@ import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -68,20 +65,12 @@ public class DistroConsistencyServiceImplTest extends BaseTest { @Mock private RecordListener<Instances> recordListener; - @Mock - private DistroComponentHolder distroComponentHolder; - - @Mock - private DistroTaskEngineHolder distroTaskEngineHolder; - private Map<String, ConcurrentLinkedQueue<RecordListener>> listeners; private Instances instances; @Before public void setUp() throws Exception { - doReturn(distroComponentHolder).when(context).getBean(DistroComponentHolder.class); - doReturn(distroTaskEngineHolder).when(context).getBean(DistroTaskEngineHolder.class); when(globalConfig.getTaskDispatchPeriod()).thenReturn(2000); distroConsistencyService = new DistroConsistencyServiceImpl(distroMapper, dataStore, serializer, switchDomain, globalConfig, distroProtocol);