You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by zh...@apache.org on 2022/06/11 12:36:16 UTC

[incubator-shenyu] branch master updated: fix grpc client lossless registration (#3531)

This is an automated email from the ASF dual-hosted git repository.

zhangzicheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new 73b287532 fix grpc client lossless registration (#3531)
73b287532 is described below

commit 73b2875328103fb25dc70de741269144a528de2c
Author: renzhuyan <40...@qq.com>
AuthorDate: Sat Jun 11 07:36:08 2022 -0500

    fix grpc client lossless registration (#3531)
---
 ...Processor.java => GrpcClientEventListener.java} | 26 +++++++++++-----------
 .../client/grpc/server/GrpcServerRunner.java       | 10 ++++-----
 .../client/grpc/ShenyuGrpcClientConfiguration.java | 16 ++++++-------
 .../grpc/ShenyuGrpcClientConfigurationTest.java    |  6 ++---
 4 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/shenyu-client/shenyu-client-grpc/src/main/java/org/apache/shenyu/client/grpc/GrpcClientBeanPostProcessor.java b/shenyu-client/shenyu-client-grpc/src/main/java/org/apache/shenyu/client/grpc/GrpcClientEventListener.java
similarity index 90%
rename from shenyu-client/shenyu-client-grpc/src/main/java/org/apache/shenyu/client/grpc/GrpcClientBeanPostProcessor.java
rename to shenyu-client/shenyu-client-grpc/src/main/java/org/apache/shenyu/client/grpc/GrpcClientEventListener.java
index 893337f71..bbadddade 100644
--- a/shenyu-client/shenyu-client-grpc/src/main/java/org/apache/shenyu/client/grpc/GrpcClientBeanPostProcessor.java
+++ b/shenyu-client/shenyu-client-grpc/src/main/java/org/apache/shenyu/client/grpc/GrpcClientEventListener.java
@@ -37,8 +37,8 @@ import org.apache.shenyu.register.common.dto.MetaDataRegisterDTO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.aop.support.AopUtils;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.core.annotation.AnnotatedElementUtils;
 import org.springframework.lang.NonNull;
 import org.springframework.util.ReflectionUtils;
@@ -48,17 +48,18 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Properties;
 import java.util.stream.Collectors;
 
 /**
- * The type Shenyu grpc client bean post processor.
+ * The type Shenyu grpc client event listener.
  */
-public class GrpcClientBeanPostProcessor implements BeanPostProcessor {
+public class GrpcClientEventListener implements ApplicationListener<ContextRefreshedEvent> {
 
-    private static final Logger LOG = LoggerFactory.getLogger(GrpcClientBeanPostProcessor.class);
+    private static final Logger LOG = LoggerFactory.getLogger(GrpcClientEventListener.class);
 
     private final ShenyuClientRegisterEventPublisher publisher = ShenyuClientRegisterEventPublisher.getInstance();
 
@@ -78,7 +79,7 @@ public class GrpcClientBeanPostProcessor implements BeanPostProcessor {
      * @param clientConfig the shenyu grpc client config
      * @param shenyuClientRegisterRepository the shenyuClientRegisterRepository
      */
-    public GrpcClientBeanPostProcessor(final PropertiesConfig clientConfig, final ShenyuClientRegisterRepository shenyuClientRegisterRepository) {
+    public GrpcClientEventListener(final PropertiesConfig clientConfig, final ShenyuClientRegisterRepository shenyuClientRegisterRepository) {
         Properties props = clientConfig.getProps();
         String contextPath = props.getProperty(ShenyuClientConstants.CONTEXT_PATH);
         String ipAndPort = props.getProperty(ShenyuClientConstants.IP_PORT);
@@ -94,12 +95,12 @@ public class GrpcClientBeanPostProcessor implements BeanPostProcessor {
     }
 
     @Override
-    public Object postProcessAfterInitialization(@NonNull final Object bean, @NonNull final String beanName) throws BeansException {
-        if (bean instanceof BindableService) {
-            exportJsonGenericService(bean);
-            handler(bean);
+    public void onApplicationEvent(@NonNull final ContextRefreshedEvent contextRefreshedEvent) {
+        Map<String, BindableService> beans = contextRefreshedEvent.getApplicationContext().getBeansOfType(BindableService.class);
+        for (Map.Entry<String, BindableService> entry : beans.entrySet()) {
+            exportJsonGenericService(entry.getValue());
+            handler(entry.getValue());
         }
-        return bean;
     }
 
     private void handler(final Object serviceBean) {
@@ -201,8 +202,7 @@ public class GrpcClientBeanPostProcessor implements BeanPostProcessor {
         return GsonUtils.getInstance().toJson(build);
     }
 
-    private void exportJsonGenericService(final Object bean) {
-        BindableService bindableService = (BindableService) bean;
+    private void exportJsonGenericService(final BindableService bindableService) {
         ServerServiceDefinition serviceDefinition = bindableService.bindService();
 
         try {
diff --git a/shenyu-client/shenyu-client-grpc/src/main/java/org/apache/shenyu/client/grpc/server/GrpcServerRunner.java b/shenyu-client/shenyu-client-grpc/src/main/java/org/apache/shenyu/client/grpc/server/GrpcServerRunner.java
index 21fff4e4a..03caa3ec6 100644
--- a/shenyu-client/shenyu-client-grpc/src/main/java/org/apache/shenyu/client/grpc/server/GrpcServerRunner.java
+++ b/shenyu-client/shenyu-client-grpc/src/main/java/org/apache/shenyu/client/grpc/server/GrpcServerRunner.java
@@ -20,7 +20,7 @@ package org.apache.shenyu.client.grpc.server;
 import io.grpc.Server;
 import io.grpc.ServerBuilder;
 import io.grpc.ServerServiceDefinition;
-import org.apache.shenyu.client.grpc.GrpcClientBeanPostProcessor;
+import org.apache.shenyu.client.grpc.GrpcClientEventListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.ApplicationArguments;
@@ -38,12 +38,12 @@ public class GrpcServerRunner implements ApplicationRunner {
 
     private final GrpcServerBuilder grpcServerBuilder;
 
-    private final GrpcClientBeanPostProcessor grpcClientBeanPostProcessor;
+    private final GrpcClientEventListener grpcClientEventListener;
 
     public GrpcServerRunner(final GrpcServerBuilder grpcServerBuilder,
-                            final GrpcClientBeanPostProcessor grpcClientBeanPostProcessor) {
+                            final GrpcClientEventListener grpcClientEventListener) {
         this.grpcServerBuilder = grpcServerBuilder;
-        this.grpcClientBeanPostProcessor = grpcClientBeanPostProcessor;
+        this.grpcClientEventListener = grpcClientEventListener;
     }
 
     @Override
@@ -54,7 +54,7 @@ public class GrpcServerRunner implements ApplicationRunner {
     private void startGrpcServer() {
         ServerBuilder<?> serverBuilder = grpcServerBuilder.buildServerBuilder();
 
-        List<ServerServiceDefinition> serviceDefinitions = grpcClientBeanPostProcessor.getServiceDefinitions();
+        List<ServerServiceDefinition> serviceDefinitions = grpcClientEventListener.getServiceDefinitions();
         for (ServerServiceDefinition serviceDefinition : serviceDefinitions) {
             serverBuilder.addService(serviceDefinition);
             LOG.info("{} has been add to grpc server", serviceDefinition.getServiceDescriptor().getName());
diff --git a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/main/java/org/apache/dromara/springboot/starter/client/grpc/ShenyuGrpcClientConfiguration.java b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/main/java/org/apache/dromara/springboot/starter/client/grpc/ShenyuGrpcClientConfiguration.java
index f59f7a158..af99bcd53 100644
--- a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/main/java/org/apache/dromara/springboot/starter/client/grpc/ShenyuGrpcClientConfiguration.java
+++ b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/main/java/org/apache/dromara/springboot/starter/client/grpc/ShenyuGrpcClientConfiguration.java
@@ -18,7 +18,7 @@
 
 package org.apache.dromara.springboot.starter.client.grpc;
 
-import org.apache.shenyu.client.grpc.GrpcClientBeanPostProcessor;
+import org.apache.shenyu.client.grpc.GrpcClientEventListener;
 import org.apache.shenyu.client.grpc.GrpcContextRefreshedEventListener;
 import org.apache.shenyu.client.grpc.server.GrpcServerBuilder;
 import org.apache.shenyu.client.grpc.server.GrpcServerRunner;
@@ -38,16 +38,16 @@ import org.springframework.context.annotation.Configuration;
 public class ShenyuGrpcClientConfiguration {
     
     /**
-     * Grpc service bean post processor.
+     * Grpc client event listener.
      *
      * @param clientConfig the client config
      * @param shenyuClientRegisterRepository the shenyu client register repository
      * @return the grpc client bean post processor
      */
     @Bean
-    public GrpcClientBeanPostProcessor grpcServiceBeanPostProcessor(final ShenyuClientConfig clientConfig,
-                                                                    final ShenyuClientRegisterRepository shenyuClientRegisterRepository) {
-        return new GrpcClientBeanPostProcessor(clientConfig.getClient().get(RpcTypeEnum.GRPC.getName()), shenyuClientRegisterRepository);
+    public GrpcClientEventListener grpcClientEventListener(final ShenyuClientConfig clientConfig,
+                                                                final ShenyuClientRegisterRepository shenyuClientRegisterRepository) {
+        return new GrpcClientEventListener(clientConfig.getClient().get(RpcTypeEnum.GRPC.getName()), shenyuClientRegisterRepository);
     }
     
     /**
@@ -65,12 +65,12 @@ public class ShenyuGrpcClientConfiguration {
      * Grpc Server.
      *
      * @param grpcServerBuilder grpcServerBuilder
-     * @param grpcServiceBeanPostProcessor grpcServiceBeanPostProcessor
+     * @param grpcClientEventListener grpcClientEventListener
      * @return the grpc server
      */
     @Bean
     public GrpcServerRunner grpcServer(final GrpcServerBuilder grpcServerBuilder,
-                                       final GrpcClientBeanPostProcessor grpcServiceBeanPostProcessor) {
-        return new GrpcServerRunner(grpcServerBuilder, grpcServiceBeanPostProcessor);
+                                       final GrpcClientEventListener grpcClientEventListener) {
+        return new GrpcServerRunner(grpcServerBuilder, grpcClientEventListener);
     }
 }
diff --git a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/test/java/org/apache/dromara/springboot/starter/client/grpc/ShenyuGrpcClientConfigurationTest.java b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/test/java/org/apache/dromara/springboot/starter/client/grpc/ShenyuGrpcClientConfigurationTest.java
index 5dc548384..98248beda 100644
--- a/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/test/java/org/apache/dromara/springboot/starter/client/grpc/ShenyuGrpcClientConfigurationTest.java
+++ b/shenyu-spring-boot-starter/shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-grpc/src/test/java/org/apache/dromara/springboot/starter/client/grpc/ShenyuGrpcClientConfigurationTest.java
@@ -18,7 +18,7 @@
 
 package org.apache.dromara.springboot.starter.client.grpc;
 
-import org.apache.shenyu.client.grpc.GrpcClientBeanPostProcessor;
+import org.apache.shenyu.client.grpc.GrpcClientEventListener;
 import org.apache.shenyu.client.grpc.GrpcContextRefreshedEventListener;
 import org.apache.shenyu.client.grpc.server.GrpcServerRunner;
 import org.apache.shenyu.register.client.http.utils.RegisterUtils;
@@ -70,8 +70,8 @@ public class ShenyuGrpcClientConfigurationTest {
         MockedStatic<RegisterUtils> registerUtilsMockedStatic = mockStatic(RegisterUtils.class);
         registerUtilsMockedStatic.when(() -> RegisterUtils.doLogin(any(), any(), any())).thenReturn(Optional.ofNullable("token"));
         applicationContextRunner.run(context -> {
-            GrpcClientBeanPostProcessor processor = context.getBean("grpcServiceBeanPostProcessor", GrpcClientBeanPostProcessor.class);
-            assertNotNull(processor);
+            GrpcClientEventListener listener = context.getBean("grpcClientEventListener", GrpcClientEventListener.class);
+            assertNotNull(listener);
         });
         registerUtilsMockedStatic.close();
     }