From c0779e31bb54783e2da88405e6d13016a5d16a04 Mon Sep 17 00:00:00 2001 From: lepdou Date: Fri, 9 Dec 2022 16:56:54 +0800 Subject: [PATCH] Revert "get service instances by Flux.blockLast() to resolve concurrent problem (#762)" This reverts commit 03659bb6849bfed92cafe0189cbbdf42950d200c. --- .../loadbalancer/LoadBalancerUtils.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java index df1c8fc48..14006d47b 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java +++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java @@ -18,8 +18,10 @@ package com.tencent.cloud.polaris.loadbalancer; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.pojo.PolarisServiceInstance; @@ -52,22 +54,19 @@ public final class LoadBalancerUtils { * @return ServiceInstances */ public static ServiceInstances transferServersToServiceInstances(Flux> servers) { - List serviceInstances = servers.blockLast(); - - List instances = new ArrayList<>(); - if (!CollectionUtils.isEmpty(serviceInstances)) { - for (ServiceInstance serviceInstance : serviceInstances) { - instances.add(transferServerToServiceInstance(serviceInstance)); - } + AtomicReference> instances = new AtomicReference<>(); + servers.subscribe(serviceInstances -> instances.set(serviceInstances.stream() + .map(LoadBalancerUtils::transferServerToServiceInstance) + .collect(Collectors.toList()))); + String serviceName = null; + if (CollectionUtils.isEmpty(instances.get())) { + instances.set(Collections.emptyList()); } - - String serviceName = ""; - if (!CollectionUtils.isEmpty(instances)) { - serviceName = instances.get(0).getService(); + else { + serviceName = instances.get().get(0).getService(); } - ServiceKey serviceKey = new ServiceKey(MetadataContext.LOCAL_NAMESPACE, serviceName); - return new DefaultServiceInstances(serviceKey, instances); + return new DefaultServiceInstances(serviceKey, instances.get()); } /**