利用cse实现广播功能,出现如下报错
日志如下: 2021-12-10 15:13:37.576 [thread-1] ERROR - [xx.java:reload:86] - [] - Reload xx data failed, with message[null]: java.lang.NullPointerException: null at org.apache.servicecomb.core.filter.OperationInstancesDiscoveryFilter.groupByVersion(OperationInstancesDiscoveryFilter.java:115) ~[java-chassis-core-1.3.6.jar!/:1.3.6] at org.apache.servicecomb.core.filter.OperationInstancesDiscoveryFilter.init(OperationInstancesDiscoveryFilter.java:72) ~[java-chassis-core-1.3.6.jar!/:1.3.6] at org.apache.servicecomb.serviceregistry.discovery.AbstractDiscoveryFilter.discovery(AbstractDiscoveryFilter.java:33) ~[service-registry-1.3.6.jar!/:?] at org.apache.servicecomb.serviceregistry.discovery.DiscoveryTree.doDiscovery(DiscoveryTree.java:166) ~[service-registry-1.3.6.jar!/:?] at org.apache.servicecomb.serviceregistry.discovery.DiscoveryTree.discovery(DiscoveryTree.java:130) ~[service-registry-1.3.6.jar!/:?] at org.apache.servicecomb.serviceregistry.discovery.DiscoveryTree.discovery(DiscoveryTree.java:123) ~[service-registry-1.3.6.jar!/:?] at com.xx.cloudsecurity.mis.aggregation.notify.ProxyBroadcastService.getServiceCombServers(ProxyBroadcastService.java:68) ~[mis-aggregation-impl-1.5.0-SNAPSHOT.jar!/:?] at com.xx.cloudsecurity.mis.aggregation.notify.ProxyBroadcastService.broadcast(ProxyBroadcastService.java:51) ~[mis-aggregation-impl-1.5.0-SNAPSHOT.jar!/:?] at com.xx.cloudsecurity.mis.aggregation.scheduler.local.MisIndexBlockLocations.lambda$scheduleIncrReloadData$9(MisIndexBlockLocations.java:125) ~[mis-aggregation-impl-1.5.0-SNAPSHOT.jar!/:?] at java.util.HashMap.forEach(HashMap.java:1289) ~[?:1.8.0_282] at com.xx.cloudsecurity.mis.aggregation.scheduler.local.MisIndexBlockLocations.scheduleIncrReloadData(MisIndexBlockLocations.java:122) ~[mis-aggregation-impl-1.5.0-SNAPSHOT.jar!/:?] at com.xx.cloudsecurity.rms.schedule.AbstractDataSet.scheduleReloadData(AbstractDataSet.java:217) ~[cfs-common-1.2.0-SNAPSHOT.jar!/:?] at com.xx.cloudsecurity.mis.aggregation.scheduler.MisIndexBlockReLoader.handleReload(MisIndexBlockReLoader.java:38) ~[mis-aggregation-impl-1.5.0-SNAPSHOT.jar!/:?] at com.xx.cloudsecurity.rms.schedule.AbstractDataReloader.reload(AbstractDataReloader.java:84) ~[cfs-common-1.2.0-SNAPSHOT.jar!/:?] at com.xx.cloudsecurity.rms.schedule.GenerticDataLoaderScheduler.execute(GenerticDataLoaderScheduler.java:56) ~[cfs-common-1.2.0-SNAPSHOT.jar!/:?] at com.xx.cloudsecurity.rms.schedule.RetryableRunner.run(RetryableRunner.java:54) ~[cfs-common-1.2.0-SNAPSHOT.jar!/:?] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_282] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:1.8.0_282] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_282] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:1.8.0_282] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_282] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_282] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_282]
关键代码如下: private List<ServiceCombServer> getServiceCombServers(String nodeGroup) { DiscoveryContext context = new DiscoveryContext(); VersionedCache serversVersionedCache = discoveryTree.discovery(context, "appid", "microserviceName", "0+"); List<ServiceCombServer> list = serversVersionedCache.data(); return list.stream().filter(server -> is(nodeGroup, server)).collect(Collectors.toList()); } discoveryTree使用如下方法初始化 public void afterPropertiesSet() throws Exception { // 可以选择去掉一部分 discoveryTree.loadFromSPI(DiscoveryFilter.class); discoveryTree.sort(); }
如果想要获取微服务实例,请按照案例(https://servicecomb.apache.org/references/java-chassis/zh_CN/general-development/context.html ) 使用CustomEndpointDiscoveryFilter过滤器,DiscoveryFilter过滤器并不适用于issue中给出的代码。 具体原因如下: DiscoveryContext context = new DiscoveryContext();初始化时里面的Invocation并没有值,而DiscoveryFilter里面的discovery方法 则需要Invocation里面的数据去创建微服务实例节点DiscoveryTreeNode。
close old issues, please feel free to submit a new one if the problem still exists.