|
36 | 36 | import com.tencent.polaris.client.util.NamedThreadFactory;
|
37 | 37 | import com.tencent.polaris.client.util.Utils;
|
38 | 38 | import com.tencent.polaris.logging.LoggerFactory;
|
| 39 | +import java.util.Arrays; |
39 | 40 | import java.util.Collections;
|
40 | 41 | import java.util.HashSet;
|
| 42 | +import java.util.List; |
41 | 43 | import java.util.Map;
|
42 | 44 | import java.util.Set;
|
43 | 45 | import java.util.concurrent.ConcurrentHashMap;
|
44 | 46 | import java.util.concurrent.Executor;
|
45 | 47 | import java.util.concurrent.Executors;
|
46 | 48 | import java.util.concurrent.atomic.AtomicBoolean;
|
47 | 49 | import java.util.function.BiConsumer;
|
| 50 | +import java.util.stream.Collectors; |
48 | 51 | import org.slf4j.Logger;
|
49 | 52 |
|
50 | 53 | /**
|
@@ -77,7 +80,18 @@ public WatchServiceResponse commonWatchService(CommonWatchServiceRequest request
|
77 | 80 | InstancesResponse response = syncFlow.commonSyncGetAllInstances(request.getAllRequest());
|
78 | 81 | watchers.computeIfAbsent(request.getSvcEventKey().getServiceKey(),
|
79 | 82 | key -> Collections.synchronizedSet(new HashSet<>()));
|
80 |
| - boolean result = watchers.get(serviceKey).addAll(request.getWatchServiceRequest().getListeners()); |
| 83 | + List<ServiceListener> addListeners = request.getWatchServiceRequest().getListeners(); |
| 84 | + Set<ServiceListener> existListeners = watchers.get(serviceKey); |
| 85 | + List<ServiceListener> firstAddedListeners = addListeners.stream() |
| 86 | + .filter(serviceListener -> !existListeners.contains(serviceListener)).collect(Collectors.toList()); |
| 87 | + if (CollectionUtils.isNotEmpty(firstAddedListeners)) { |
| 88 | + ServiceChangeEvent event = ServiceChangeEvent.builder().serviceKey(serviceKey) |
| 89 | + .addInstances(Arrays.asList(response.getInstances())) |
| 90 | + .allInstances(Arrays.asList(response.getInstances())).build(); |
| 91 | + firstAddedListeners.forEach( |
| 92 | + serviceListener -> executor.execute(event.getServiceKey(), () -> serviceListener.onEvent(event))); |
| 93 | + } |
| 94 | + boolean result = existListeners.addAll(addListeners); |
81 | 95 | return new WatchServiceResponse(response, result);
|
82 | 96 | }
|
83 | 97 |
|
|
0 commit comments