/** * Creates a new {@link GrpcService}. * * @param bindableService gRPC bindable service */ public GrpcService(BindableService bindableService) { mServiceDefinition = bindableService.bindService(); }
@SuppressWarnings("rawtypes") public void addService(BindableService bindableService, Provider provider) { addService(bindableService.bindService(), provider); }
/** * Adds a gRPC {@link BindableService} to this {@link GrpcServiceBuilder}. Most gRPC service * implementations are {@link BindableService}s. */ public GrpcServiceBuilder addService(BindableService bindableService) { return addService(bindableService.bindService()); }
@Override public void run(String... args) throws Exception { log.info("Starting gRPC Server ..."); Collection<ServerInterceptor> globalInterceptors = getBeanNamesByTypeWithAnnotation(GRpcGlobalInterceptor.class, ServerInterceptor.class) .map(name -> applicationContext.getBeanFactory().getBean(name, ServerInterceptor.class)) .collect(Collectors.toList()); // Adding health service serverBuilder.addService(healthStatusManager.getHealthService()); // find and register all GRpcService-enabled beans getBeanNamesByTypeWithAnnotation(GRpcService.class, BindableService.class) .forEach(name -> { BindableService srv = applicationContext.getBeanFactory().getBean(name, BindableService.class); ServerServiceDefinition serviceDefinition = srv.bindService(); GRpcService gRpcServiceAnn = applicationContext.findAnnotationOnBean(name, GRpcService.class); serviceDefinition = bindInterceptors(serviceDefinition, gRpcServiceAnn, globalInterceptors); serverBuilder.addService(serviceDefinition); String serviceName = serviceDefinition.getServiceDescriptor().getName(); healthStatusManager.setStatus(serviceName, HealthCheckResponse.ServingStatus.SERVING); log.info("'{}' service has been registered.", srv.getClass().getName()); }); if (gRpcServerProperties.isEnableReflection()) { serverBuilder.addService(ProtoReflectionService.newInstance()); log.info("'{}' service has been registered.", ProtoReflectionService.class.getName()); } configurer.configure(serverBuilder); server = serverBuilder.build().start(); applicationContext.publishEvent(new GRpcServerInitializedEvent(server)); log.info("gRPC Server started, listening on port {}.", server.getPort()); startDaemonAwaitThread(); }
/** * Pre-registers the all methods provided by the given service. This will initialize all default counters and timers * for those methods. * * @param service The service to initialize the meters for. * @see #preregisterService(ServerServiceDefinition) */ public void preregisterService(final BindableService service) { preregisterService(service.bindService()); }
@Override public Collection<GrpcServiceDefinition> findGrpcServices() { Collection<String> beanNames = Arrays.asList(this.applicationContext.getBeanNamesForAnnotation(GrpcService.class)); List<GrpcServiceDefinition> definitions = Lists.newArrayListWithCapacity(beanNames.size()); GlobalServerInterceptorRegistry globalServerInterceptorRegistry = applicationContext.getBean(GlobalServerInterceptorRegistry.class); List<ServerInterceptor> globalInterceptorList = globalServerInterceptorRegistry.getServerInterceptors(); for (String beanName : beanNames) { BindableService bindableService = this.applicationContext.getBean(beanName, BindableService.class); ServerServiceDefinition serviceDefinition = bindableService.bindService(); GrpcService grpcServiceAnnotation = applicationContext.findAnnotationOnBean(beanName, GrpcService.class); serviceDefinition = bindInterceptors(serviceDefinition, grpcServiceAnnotation, globalInterceptorList); definitions.add(new GrpcServiceDefinition(beanName, bindableService.getClass(), serviceDefinition)); log.debug("Found gRPC service: " + serviceDefinition.getServiceDescriptor().getName() + ", bean: " + beanName + ", class: " + bindableService.getClass().getName()); } return definitions; }
@Bean @Lazy InfoContributor grpcInfoContributor(final GrpcServerProperties properties, final Collection<BindableService> grpcServices, final HealthStatusManager healthStatusManager) { final Map<String, Object> details = new LinkedHashMap<>(); details.put("port", properties.getPort()); if (properties.isReflectionServiceEnabled()) { // Only expose services via web-info if we do the same via grpc. final Map<String, List<String>> services = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); details.put("services", services); final List<BindableService> mutableGrpcServiceList = new ArrayList<>(grpcServices); mutableGrpcServiceList.add(ProtoReflectionService.newInstance()); if (properties.isHealthServiceEnabled()) { mutableGrpcServiceList.add(healthStatusManager.getHealthService()); } for (final BindableService grpcService : mutableGrpcServiceList) { final ServiceDescriptor serviceDescriptor = grpcService.bindService().getServiceDescriptor(); final List<String> methods = collectMethodNamesForService(serviceDescriptor); services.put(serviceDescriptor.getName(), methods); } } return new SimpleInfoContributor("grpc.server", details); }
@Override public ServerServiceDefinition export(Class<?> protocol, Object protocolImpl) { Object obj = protocolImpl; if (!(obj instanceof BindableService)) { throw new IllegalStateException(" Object is not io.grpc.BindableService,can not export " + obj); } else { BindableService bindableService = (BindableService) obj; log.info("'{}' service has been registered.", bindableService.getClass().getName()); return bindableService.bindService(); } } }
public static ServerServiceDefinition interceptForward( BindableService bindableService, List<? extends ServerInterceptor> interceptors) { return interceptForward(bindableService.bindService(), interceptors); }
@Override public final T addService(BindableService bindableService) { if (bindableService instanceof InternalNotifyOnServerBuild) { notifyOnBuildList.add((InternalNotifyOnServerBuild) bindableService); } return addService(checkNotNull(bindableService, "bindableService").bindService()); }
/** * Pre-registers the all methods provided by the given service. This will initialize all default counters and timers * for those methods. * * @param service The service to initialize the meters for. * @see #preregisterService(ServerServiceDefinition) */ public void preregisterService(final BindableService service) { preregisterService(service.bindService()); }
public static ServerServiceDefinition interceptForward( BindableService bindableService, List<? extends ServerInterceptor> interceptors) { return interceptForward(bindableService.bindService(), interceptors); }
/** * Registers a service. * * @return the previously registered service with the same service descriptor name if exists, * otherwise {@code null}. */ @Nullable public ServerServiceDefinition addService(BindableService bindableService) { return addService(bindableService.bindService()); }
/** * Adds a gRPC {@link BindableService} to this {@link GrpcServiceBuilder}. Most gRPC service * implementations are {@link BindableService}s. */ public GrpcServiceBuilder addService(BindableService bindableService) { return addService(bindableService.bindService()); }
public static ServerServiceDefinition intercept(BindableService bindableService, List<? extends ServerInterceptor> interceptors) { Preconditions.checkNotNull(bindableService, "bindableService"); return intercept(bindableService.bindService(), interceptors); }
/** * Registers a service. * * @return the previously registered service with the same service descriptor name if exists, * otherwise {@code null}. */ @Nullable public ServerServiceDefinition addService(BindableService bindableService) { return addService(bindableService.bindService()); }
public static ServerServiceDefinition intercept(BindableService bindableService, ServerInterceptor... interceptors) { Preconditions.checkNotNull(bindableService, "bindableService"); return intercept(bindableService.bindService(), Arrays.asList(interceptors)); }
public static ServerServiceDefinition interceptForward(BindableService bindableService, ServerInterceptor... interceptors) { return interceptForward(bindableService.bindService(), Arrays.asList(interceptors)); }
public static ServerServiceDefinition intercept(BindableService bindableService, List<? extends ServerInterceptor> interceptors) { Preconditions.checkNotNull(bindableService, "bindableService"); return intercept(bindableService.bindService(), interceptors); }
@SuppressWarnings("unchecked") private ServerServiceDefinition bindService(Supplier<T> factory) { ServerServiceDefinition baseDefinition = factory.get().bindService(); ServiceDescriptor descriptor = baseDefinition.getServiceDescriptor(); Collection<ServerMethodDefinition<?, ?>> methods = baseDefinition.getMethods(); ServerServiceDefinition.Builder builder = ServerServiceDefinition.builder(descriptor); methods.forEach(method -> builder.addMethod(ServerMethodDefinition.create(method.getMethodDescriptor(), new PerCallServerCallHandler(factory)))); return builder.build(); }