Pre-check
- [x] I am sure that all the content I provide is in English.
Search before asking
- [x] I had searched in the issues and found no similar issues.
Apache Dubbo Component
Java SDK (apache/dubbo)
Dubbo Version
Dubbo Java 3.3.1 JDK 17 Nacos 2.5.1
Steps to reproduce this issue
Application-level service discovery fails when IDL package
and java_package
differ
org.apache.dubbo.rpc.RpcException: No provider available from registry RegistryDirectory(registry: 127.0.0.1:8848)-Directory(invokers: 0[], validInvokers: 0[], invokersToReconnect: 0[]) for service org.apache.dubbo.springboot.demo.idl.Greeter on consumer 10.94.201.88 use dubbo version 3.3.1, please check status of providers(disabled, not registered or in blocklist). at org.apache.dubbo.registry.integration.DynamicDirectory.doList(DynamicDirectory.java:204) ~[dubbo-3.3.1.jar:3.3.1] at org.apache.dubbo.rpc.cluster.directory.AbstractDirectory.list(AbstractDirectory.java:232) ~[dubbo-3.3.1.jar:3.3.1] at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.list(AbstractClusterInvoker.java:452) ~[dubbo-3.3.1.jar:3.3.1] at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:355) ~[dubbo-3.3.1.jar:3.3.1] at org.apache.dubbo.rpc.cluster.router.RouterSnapshotFilter.invoke(RouterSnapshotFilter.java:46) ~[dubbo-3.3.1.jar:3.3.1] at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.1.jar:3.3.1] at org.apache.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:109) ~[dubbo-3.3.1.jar:3.3.1] at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349) ~[dubbo-3.3.1.jar:3.3.1]
What you expected to happen
The consumer should successfully discover and connect to the service provider, as the java_package
option is intended to control the Java package for generated code, and Dubbo's service discovery should correctly use SERVICE_NAME instead of JAVA_SERVICE_NAME
Anything else
No response
Are you willing to submit a pull request to fix on your own?
- [ ] Yes I am willing to submit a pull request on my own!
Code of Conduct
- [x] I agree to follow this project's Code of Conduct
Comment From: heliang666s
Thanks for the feedback!@lqscript
When the IDL package and the java_package are different, the service name actually used by the provider and the consumer is inconsistent, leading to service discovery failure.
In short, the problem is that the service is registered with one name, while service discovery uses another name. I will fix this.
Comment From: lqscript
In short, the problem is that the service is registered with one name, while service discovery uses another name. I will fix this.
Thank you for confirming the fix!
Could you please provide an estimated timeline for when this fix might be available? Specifically, is it targeted for the upcoming 3.3.5 release? If so, do you have an approximate release date for version 3.3.5?
Thanks for your help!
Comment From: wcy666103
Can you provide a sample to github link, I did not succeed to reproduce the problem you said. @lqscript
Comment From: lqscript
Steps to reproduce this issue
Application-level service discovery fails when IDL
package
andjava_package
differ
@wcy666103
Comment From: LenoMinkus
Title: Generated protobuf sources not picked up by Maven build
Body (English):
Summary
When using the currentdubbo-maven-plugin
to compile.proto
files, the generated Java sources are placed under
target/generated-sources/protobuf/java
, but Maven only scans the standardsrc/main/java
directory duringpackage
.
As a result, the generated classes are not included in the final JAR unless an extra step is taken.Suggestion
1. Extract.proto
files into a dedicated Maven module.
2. Let thedubbo-maven-plugin
generate sources in that module.
3. Consume the generated stubs from other modules via a normal Maven dependency.Fix
Add the following dependency and plugin so Maven automatically adds the generated folder to the compile classpath:
```xml
<build>
<plugins>
<plugin>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-maven-plugin</artifactId>
<version>${dubbo.version}</version> <!-- 3.3.0及以上版本 -->
<configuration>
<!-- 参考下文可配置参数 -->
<outputDir>${project.build.directory}/generated-sources/protobuf/java</outputDir>
<protoSourceDir>${basedir}/src/main/proto</protoSourceDir>
<!--proto编译器组件-->
<!--protobuf-java的版本-->
<protocVersion>${protobuf.version}</protocVersion>
<!--代码生成类型 可填tri或者tri_reactor 服务定义-->
<dubboGenerateType>tri</dubboGenerateType>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<!-- 添加os-maven-plugin用于自动检测系统类型 -->
<dependencies>
<dependency>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.7.0</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals><goal>add-source</goal></goals>
<configuration>
<sources>
<!-- 与 dubbo-maven-plugin 的 outputDir 保持一致 -->
<source>${project.build.directory}/generated-sources/protobuf/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Environment
- Dubbo version: 3.3.0
- Maven: 3.9.x
- JDK: 17 some photos