Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to register gRPC services in Nacos ? #1152

Open
11D-Beyonder opened this issue Nov 20, 2024 · 0 comments
Open

How to register gRPC services in Nacos ? #1152

11D-Beyonder opened this issue Nov 20, 2024 · 0 comments
Labels
question A question about this library or its usage

Comments

@11D-Beyonder
Copy link

11D-Beyonder commented Nov 20, 2024

The context

When a grpc service is started, the service is automatically registered in nacos and displayed in the nacos web console.

The question

I refer to the example, which uses spring-cloud-alibaba.

The application.yml is as follows:

spring:
  application:
    name: cloud-grpc-server
  cloud:
    nacos:
      discovery:
        server-addr: 172.16.3.75:8848
server:
  port: 8787
grpc:
  server:
    port: 9787

@EnableDiscoveryClient should also be added.

The service start well.
grpcurl --plaintext -d '{"name": "test"}' localhost:9787 com.example.grpc_nacos.idl.HelloService.SayHello.
But it is not registered in Nacos.

Stacktraces and logs

The service start well.

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.4)

2024-11-20T17:07:22.973+08:00  INFO 45706 --- [cloud-grpc-server] [           main] c.e.grpc_nacos.GrpcNacosApplication      : Starting GrpcNacosApplication using Java 17.0.13 with PID 45706 (/Users/joe/Source/demo/grpc-nacos/target/classes started by joe in /Users/joe/Source/demo/grpc-nacos)
2024-11-20T17:07:22.975+08:00  INFO 45706 --- [cloud-grpc-server] [           main] c.e.grpc_nacos.GrpcNacosApplication      : No active profile set, falling back to 1 default profile: "default"
2024-11-20T17:07:23.302+08:00  INFO 45706 --- [cloud-grpc-server] [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=eeec87e2-94aa-3e0f-9fa7-c6321e3276ea
2024-11-20T17:07:23.395+08:00  INFO 45706 --- [cloud-grpc-server] [           main] g.s.a.GrpcServerFactoryAutoConfiguration : Detected grpc-netty-shaded: Creating ShadedNettyGrpcServerFactory
2024-11-20T17:07:23.530+08:00  INFO 45706 --- [cloud-grpc-server] [           main] n.d.b.g.s.s.AbstractGrpcServerFactory    : Registered gRPC service: com.example.grpc_nacos.idl.HelloService, bean: helloService, class: com.example.grpc_nacos.service.HelloService
2024-11-20T17:07:23.530+08:00  INFO 45706 --- [cloud-grpc-server] [           main] n.d.b.g.s.s.AbstractGrpcServerFactory    : Registered gRPC service: grpc.health.v1.Health, bean: grpcHealthService, class: io.grpc.protobuf.services.HealthServiceImpl
2024-11-20T17:07:23.530+08:00  INFO 45706 --- [cloud-grpc-server] [           main] n.d.b.g.s.s.AbstractGrpcServerFactory    : Registered gRPC service: grpc.reflection.v1alpha.ServerReflection, bean: protoReflectionService, class: io.grpc.protobuf.services.ProtoReflectionService
2024-11-20T17:07:23.589+08:00  INFO 45706 --- [cloud-grpc-server] [           main] n.d.b.g.s.s.GrpcServerLifecycle          : gRPC Server started, listening on address: *, port: 4485
2024-11-20T17:07:23.604+08:00  INFO 45706 --- [cloud-grpc-server] [           main] c.e.grpc_nacos.GrpcNacosApplication      : Started GrpcNacosApplication in 0.859 seconds (process running for 1.067)

The application's environment

Which versions do you use?

  • spring-boot: 3.2.4
  • grpc-java: 1.63.0
  • grpc-spring-boot-starter: 3.1.0.RELEASE
  • protobuf: 3.25.2
  • spring-cloud-alibab: 2023.0.1.0
  • java: openjdk version "17.0.13" 64-Bit
  • nacos: 2.3.2

How to reproduce

Just write a HelloService Demo.

Additional Infomation

If I add spring-boot-web-starter in dependencies, the server fail to start.

2024-11-20T20:22:55.062+08:00 ERROR 19203 --- [cloud-grpc-server] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Exception starting filter [requestContextFilter]

java.lang.NoClassDefFoundError: jakarta/annotation/PostConstruct
        at org.apache.catalina.core.DefaultInstanceManager.findPostConstruct(DefaultInstanceManager.java:640) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.DefaultInstanceManager.populateAnnotationsCache(DefaultInstanceManager.java:341) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:164) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:157) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:101) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4287) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4902) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[na:na]
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:845) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[na:na]
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:240) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:921) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.apache.catalina.startup.Tomcat.start(Tomcat.java:437) ~[tomcat-embed-core-10.1.19.jar:10.1.19]
        at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:126) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:105) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:499) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:218) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:188) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:618) ~[spring-context-6.1.5.jar:6.1.5]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.4.jar:3.2.4]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.4.jar:3.2.4]
        at com.example.grpc_nacos.GrpcNacosApplication.main(GrpcNacosApplication.java:13) ~[classes/:na]
Caused by: java.lang.ClassNotFoundException: jakarta.annotation.PostConstruct
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
        ... 43 common frames omitted

The error is most likely caused by

<dependency>
	<!-- Java 9+ compatibility - Do NOT update to 2.0.0 -->
	<groupId>jakarta.annotation</groupId>
	<artifactId>jakarta.annotation-api</artifactId>
	<version>1.3.5</version>
	<optional>true</optional>
</dependency>

After the version is downgraded to the following, the service is registered and the gPRC port is displayed.

  • spring-boot: 2.6.13
  • grpc-java: 1.51.0
  • grpc-spring-boot-starter: 2.14.0.RELEASE
  • protobuf: 3.21.9
  • spring-cloud-alibab: 2021.0.6.0
  • java: openjdk version "17.0.13" 64-Bit
  • nacos: 2.2.0

image

@11D-Beyonder 11D-Beyonder added the question A question about this library or its usage label Nov 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question A question about this library or its usage
Projects
None yet
Development

No branches or pull requests

1 participant