diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 1717a1e5f1..d5eade3841 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -2,7 +2,7 @@
name: Bug Report
about: Report a bug in Dubbo
title: ''
-labels: type/bug
+labels: status/need-triage
assignees: ''
---
diff --git a/.licenserc.yaml b/.licenserc.yaml
index 9b384c5012..e497f4b10e 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -38,7 +38,6 @@ header:
- '**/*.fc'
- '**/*.javascript'
- '**/*.properties'
- - '**/*.thrift'
- '**/*.sh'
- '**/*.bat'
- '**/*.md'
diff --git a/README.md b/README.md
index 504b42f014..320551d4ad 100644
--- a/README.md
+++ b/README.md
@@ -74,5 +74,51 @@ See [CONTRIBUTING](https://github.com/apache/dubbo/blob/master/CONTRIBUTING.md)
* Twitter: [@ApacheDubbo](https://twitter.com/ApacheDubbo)
* Security issues: please mail to [us](mailto:security@dubbo.apache.org) privately.
+## Contributing
+
+See [CONTRIBUTING](https://github.com/apache/dubbo/blob/master/CONTRIBUTING.md) for details on submitting patches and the contribution workflow.
+
+### How can I contribute?
+
+* Take a look at issues with tags marked [`Good first issue`](https://github.com/apache/dubbo/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) or [`Help wanted`](https://github.com/apache/dubbo/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22).
+* Join the discussion on the mailing list, subscription [guide](https://github.com/apache/dubbo/wiki/Mailing-list-subscription-guide).
+* Answer questions on [issues](https://github.com/apache/dubbo/issues).
+* Fix bugs reported on [issues](https://github.com/apache/dubbo/issues), and send us a pull request.
+* Review the existing [pull request](https://github.com/apache/dubbo/pulls).
+* Improve the [website](https://github.com/apache/dubbo-website), typically we need
+ * blog post
+ * translation on documentation
+ * use cases around the integration of Dubbo in enterprise systems.
+* Improve the [dubbo-admin/dubbo-monitor](https://github.com/apache/dubbo-admin).
+* Contribute to the projects listed in [ecosystem](https://github.com/dubbo).
+* Other forms of contribution not explicitly enumerated above.
+* If you would like to contribute, please send an email to dev@dubbo.apache.org to let us know!
+
+## Reporting bugs
+
+Please follow the [template](https://github.com/apache/dubbo/issues/new?template=dubbo-issue-report-template.md) for reporting any issues.
+
+## Reporting a security vulnerability
+
+Please report security vulnerabilities to [us](mailto:security@dubbo.apache.org) privately.
+
+## Dubbo ecosystem
+
+* [Dubbo Ecosystem Entry](https://github.com/apache?utf8=%E2%9C%93&q=dubbo&type=&language=) - A GitHub group `dubbo` to gather all Dubbo relevant projects not appropriate in [apache](https://github.com/apache) group yet
+* [Dubbo Website](https://github.com/apache/dubbo-website) - Apache Dubbo official website
+* [Dubbo Samples](https://github.com/apache/dubbo-samples) - samples for Apache Dubbo
+* [Dubbo Spring Boot](https://github.com/apache/dubbo-spring-boot-project) - Spring Boot Project for Dubbo
+* [Dubbo Admin](https://github.com/apache/dubbo-admin) - The reference implementation for Dubbo admin
+* [Dubbo Awesome](https://github.com/apache/dubbo-awesome) - Dubbo's slides and video links in Meetup
+
+#### Language
+
+* [Go](https://github.com/apache/dubbo-go) (recommended)
+* [Rust](https://github.com/apache/dubbo-rust)
+* [Node.js](https://github.com/apache/dubbo-js)
+* [Python](https://github.com/dubbo/py-client-for-apache-dubbo)
+* [PHP](https://github.com/apache/dubbo-php-framework)
+* [Erlang](https://github.com/apache/dubbo-erlang)
+
## License
Apache Dubbo is licensed under the Apache License Version 2.0. See the [LICENSE](https://github.com/apache/dubbo/blob/master/LICENSE) file for details.
diff --git a/codecov.yml b/codecov.yml
index 6c5cd08250..594d03079b 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -31,4 +31,3 @@ ignore:
- "**/dubbo-native/**"
- "**/dubbo-common/src/main/java/org/apache/dubbo/common/json/*.java" # internal JSON impl is deprecate, ignore test coverage for them
- "**/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/AnnotationBean.java" # Deprecated
- - "**/dubbo-rpc/dubbo-rpc-thrift/**"
diff --git a/dubbo-common/pom.xml b/dubbo-common/pom.xml
index 476f08bc94..041a674c19 100644
--- a/dubbo-common/pom.xml
+++ b/dubbo-common/pom.xml
@@ -110,5 +110,10 @@
log4j-slf4j-impltest
+
+ com.google.protobuf
+ protobuf-java
+ test
+
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/TreePathDynamicConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/TreePathDynamicConfiguration.java
index 868cb6753e..00350d8a17 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/TreePathDynamicConfiguration.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/TreePathDynamicConfiguration.java
@@ -31,7 +31,6 @@ import static org.apache.dubbo.common.utils.PathUtils.normalize;
*
*
* @see DynamicConfiguration
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ProtobufUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ProtobufUtils.java
new file mode 100644
index 0000000000..a126fc61cd
--- /dev/null
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ProtobufUtils.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.common.utils;
+
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
+
+import static org.apache.dubbo.common.constants.CommonConstants.PROTOBUF_MESSAGE_CLASS_NAME;
+
+public class ProtobufUtils {
+
+ private static final Logger logger = LoggerFactory.getLogger(ProtobufUtils.class);
+
+ private static Class> protobufClss;
+
+ private ProtobufUtils() {}
+
+ static {
+ try {
+ protobufClss = ClassUtils.forName(PROTOBUF_MESSAGE_CLASS_NAME, ProtobufUtils.class.getClassLoader());
+ } catch (Throwable t) {
+ logger.info("protobuf's dependency is absent");
+ }
+ }
+
+ public static boolean isProtobufClass(Class> pojoClazz) {
+ if (protobufClss != null) {
+ return protobufClss.isAssignableFrom(pojoClazz);
+ }
+ return false;
+ }
+}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java
index bf30c66474..64358b1552 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java
@@ -153,6 +153,12 @@ public abstract class AbstractServiceConfig extends AbstractInterfaceConfig {
*/
private Integer payload;
+ /**
+ * Whether to use java_package in IDL as path. Default use package.
+ * This param only available when service using native stub.
+ */
+ private Boolean useJavaPackageAsPath;
+
public AbstractServiceConfig() {}
public AbstractServiceConfig(ModuleModel moduleModel) {
@@ -168,7 +174,9 @@ public abstract class AbstractServiceConfig extends AbstractInterfaceConfig {
if (dynamic == null) {
dynamic = true;
}
-
+ if (useJavaPackageAsPath == null) {
+ useJavaPackageAsPath = false;
+ }
if (StringUtils.isBlank(preferSerialization)) {
preferSerialization = serialization;
}
@@ -386,4 +394,13 @@ public abstract class AbstractServiceConfig extends AbstractInterfaceConfig {
public void setPayload(Integer payload) {
this.payload = payload;
}
+
+ public Boolean getUseJavaPackageAsPath() {
+ return useJavaPackageAsPath;
+ }
+
+ @Parameter(excluded = true)
+ public void setUseJavaPackageAsPath(Boolean useJavaPackageAsPath) {
+ this.useJavaPackageAsPath = useJavaPackageAsPath;
+ }
}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboService.java b/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboService.java
index a945909edf..905abe718c 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboService.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboService.java
@@ -257,7 +257,17 @@ public @interface DubboService {
String[] listener() default {};
/**
- * Customized parameter key-value pair, for example: {key1, value1, key2, value2}
+ * Customized parameter key-value pair, for example:
+ *
+ * @see org.apache.dubbo.config.spring.util.DubboAnnotationUtils#convertParameters(java.lang.String[])
*/
String[] parameters() default {};
@@ -327,4 +337,21 @@ public @interface DubboService {
* Payload max length.
*/
String payload() default "";
+
+ /**
+ * The serialization type
+ */
+ String serialization() default "";
+
+ /**
+ * If the parameter has a value, the consumer will read the parameter first.
+ * If the Dubbo Sdk you are using contains the serialization type, the serialization method specified by the argument is used.
+ *
+ * When this parameter is null or the serialization type specified by this parameter does not exist in the Dubbo SDK, the serialization type specified by serialization is used.
+ * If the Dubbo SDK if still does not exist, the default type of the Dubbo SDK is used.
+ * For Dubbo SDK >= 3.2, preferSerialization takes precedence over serialization
+ *
+ * The configuration supports multiple, which are separated by commas.Such as:fastjson2,fastjson,hessian2
+ */
+ String preferSerialization() default "";
}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java
index bfe497e2ee..56793dd6f9 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java
@@ -28,7 +28,6 @@ import java.util.stream.Stream;
public class StubMethodDescriptor implements MethodDescriptor, PackableMethod {
private static final Logger logger = LoggerFactory.getLogger(StubMethodDescriptor.class);
- private final ServiceDescriptor serviceDescriptor;
private final ConcurrentMap attributeMap = new ConcurrentHashMap<>();
private final String methodName;
private final String[] compatibleParamSignatures;
@@ -46,14 +45,12 @@ public class StubMethodDescriptor implements MethodDescriptor, PackableMethod {
String methodName,
Class> requestClass,
Class> responseClass,
- StubServiceDescriptor serviceDescriptor,
RpcType rpcType,
Pack requestPack,
Pack responsePack,
UnPack requestUnpack,
UnPack responseUnpack) {
this.methodName = methodName;
- this.serviceDescriptor = serviceDescriptor;
this.rpcType = rpcType;
this.requestPack = requestPack;
this.responsePack = responsePack;
@@ -65,7 +62,6 @@ public class StubMethodDescriptor implements MethodDescriptor, PackableMethod {
this.compatibleParamSignatures =
Stream.of(parameterClasses).map(Class::getName).toArray(String[]::new);
this.returnTypes = new Type[] {responseClass, responseClass};
- serviceDescriptor.addMethod(this);
}
@Override
diff --git a/dubbo-common/src/main/resources/security/serialize.blockedlist b/dubbo-common/src/main/resources/security/serialize.blockedlist
index 07bc753ccf..0faf555cbf 100644
--- a/dubbo-common/src/main/resources/security/serialize.blockedlist
+++ b/dubbo-common/src/main/resources/security/serialize.blockedlist
@@ -130,7 +130,6 @@ org.apache.commons.fileupload
org.apache.commons.jelly.
org.apache.commons.logging.
org.apache.commons.proxy.
-org.apache.cxf.jaxrs.provider.
org.apache.hadoop.shaded.com.zaxxer.hikari.
org.apache.http.auth.
org.apache.http.conn.
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ProtobufUtilsTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ProtobufUtilsTest.java
new file mode 100644
index 0000000000..e7ca7bc01b
--- /dev/null
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ProtobufUtilsTest.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.common.utils;
+
+import org.apache.dubbo.common.vo.UserVo;
+import org.apache.dubbo.rpc.model.HelloReply;
+import org.apache.dubbo.rpc.model.HelloRequest;
+import org.apache.dubbo.rpc.model.Person;
+import org.apache.dubbo.rpc.model.SerializablePerson;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class ProtobufUtilsTest {
+
+ @Test
+ void testIsProtobufClass() {
+ Assertions.assertTrue(ProtobufUtils.isProtobufClass(HelloRequest.class));
+ Assertions.assertTrue(ProtobufUtils.isProtobufClass(HelloReply.class));
+ Assertions.assertFalse(ProtobufUtils.isProtobufClass(Person.class));
+ Assertions.assertFalse(ProtobufUtils.isProtobufClass(SerializablePerson.class));
+ Assertions.assertFalse(ProtobufUtils.isProtobufClass(UserVo.class));
+ }
+}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/HelloReply.java b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/HelloReply.java
new file mode 100644
index 0000000000..3ecd4585e5
--- /dev/null
+++ b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/HelloReply.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.rpc.model;
+
+import com.google.protobuf.Message;
+
+public final class HelloReply extends com.google.protobuf.GeneratedMessageV3 {
+
+ @Override
+ protected FieldAccessorTable internalGetFieldAccessorTable() {
+ return null;
+ }
+
+ @Override
+ protected Message.Builder newBuilderForType(BuilderParent builderParent) {
+ return null;
+ }
+
+ @Override
+ public Message.Builder newBuilderForType() {
+ return null;
+ }
+
+ @Override
+ public Message.Builder toBuilder() {
+ return null;
+ }
+
+ @Override
+ public Message getDefaultInstanceForType() {
+ return null;
+ }
+}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/HelloRequest.java b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/HelloRequest.java
new file mode 100644
index 0000000000..1ea1cc6136
--- /dev/null
+++ b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/HelloRequest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.rpc.model;
+
+import com.google.protobuf.Message;
+
+public final class HelloRequest extends com.google.protobuf.GeneratedMessageV3 {
+
+ @Override
+ protected FieldAccessorTable internalGetFieldAccessorTable() {
+ return null;
+ }
+
+ @Override
+ protected Message.Builder newBuilderForType(BuilderParent builderParent) {
+ return null;
+ }
+
+ @Override
+ public Message.Builder newBuilderForType() {
+ return null;
+ }
+
+ @Override
+ public Message.Builder toBuilder() {
+ return null;
+ }
+
+ @Override
+ public Message getDefaultInstanceForType() {
+ return null;
+ }
+}
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java
index d88abf52a6..cdedf27adf 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java
@@ -31,14 +31,14 @@ import static org.hamcrest.Matchers.not;
class ProviderConfigTest {
@Test
- void testProtocol() throws Exception {
+ void testProtocol() {
ProviderConfig provider = new ProviderConfig();
provider.setProtocol("protocol");
assertThat(provider.getProtocol().getName(), equalTo("protocol"));
}
@Test
- void testDefault() throws Exception {
+ void testDefault() {
ProviderConfig provider = new ProviderConfig();
provider.setDefault(true);
Map parameters = new HashMap();
@@ -48,7 +48,7 @@ class ProviderConfigTest {
}
@Test
- void testHost() throws Exception {
+ void testHost() {
ProviderConfig provider = new ProviderConfig();
provider.setHost("demo-host");
Map parameters = new HashMap();
@@ -58,7 +58,7 @@ class ProviderConfigTest {
}
@Test
- void testPort() throws Exception {
+ void testPort() {
ProviderConfig provider = new ProviderConfig();
provider.setPort(8080);
Map parameters = new HashMap();
@@ -68,7 +68,7 @@ class ProviderConfigTest {
}
@Test
- void testPath() throws Exception {
+ void testPath() {
ProviderConfig provider = new ProviderConfig();
provider.setPath("/path");
Map parameters = new HashMap();
@@ -79,7 +79,7 @@ class ProviderConfigTest {
}
@Test
- void testContextPath() throws Exception {
+ void testContextPath() {
ProviderConfig provider = new ProviderConfig();
provider.setContextpath("/context-path");
Map parameters = new HashMap();
@@ -89,28 +89,35 @@ class ProviderConfigTest {
}
@Test
- void testThreads() throws Exception {
+ void testThreads() {
ProviderConfig provider = new ProviderConfig();
provider.setThreads(10);
assertThat(provider.getThreads(), is(10));
}
@Test
- void testIothreads() throws Exception {
+ void testIothreads() {
ProviderConfig provider = new ProviderConfig();
provider.setIothreads(10);
assertThat(provider.getIothreads(), is(10));
}
@Test
- void testQueues() throws Exception {
+ void testAlive() {
+ ProviderConfig provider = new ProviderConfig();
+ provider.setAlive(10);
+ assertThat(provider.getAlive(), is(10));
+ }
+
+ @Test
+ void testQueues() {
ProviderConfig provider = new ProviderConfig();
provider.setQueues(10);
assertThat(provider.getQueues(), is(10));
}
@Test
- void testAccepts() throws Exception {
+ void testAccepts() {
ProviderConfig provider = new ProviderConfig();
provider.setAccepts(10);
assertThat(provider.getAccepts(), is(10));
@@ -124,35 +131,35 @@ class ProviderConfigTest {
}
@Test
- void testPayload() throws Exception {
+ void testPayload() {
ProviderConfig provider = new ProviderConfig();
provider.setPayload(10);
assertThat(provider.getPayload(), is(10));
}
@Test
- void testBuffer() throws Exception {
+ void testBuffer() {
ProviderConfig provider = new ProviderConfig();
provider.setBuffer(10);
assertThat(provider.getBuffer(), is(10));
}
@Test
- void testServer() throws Exception {
+ void testServer() {
ProviderConfig provider = new ProviderConfig();
provider.setServer("demo-server");
assertThat(provider.getServer(), equalTo("demo-server"));
}
@Test
- void testClient() throws Exception {
+ void testClient() {
ProviderConfig provider = new ProviderConfig();
provider.setClient("client");
assertThat(provider.getClient(), equalTo("client"));
}
@Test
- void testPrompt() throws Exception {
+ void testPrompt() {
ProviderConfig provider = new ProviderConfig();
provider.setPrompt("#");
Map parameters = new HashMap();
@@ -162,21 +169,21 @@ class ProviderConfigTest {
}
@Test
- void testDispatcher() throws Exception {
+ void testDispatcher() {
ProviderConfig provider = new ProviderConfig();
provider.setDispatcher("mockdispatcher");
assertThat(provider.getDispatcher(), equalTo("mockdispatcher"));
}
@Test
- void testNetworker() throws Exception {
+ void testNetworker() {
ProviderConfig provider = new ProviderConfig();
provider.setNetworker("networker");
assertThat(provider.getNetworker(), equalTo("networker"));
}
@Test
- void testWait() throws Exception {
+ void testWait() {
ProviderConfig provider = new ProviderConfig();
provider.setWait(10);
assertThat(provider.getWait(), equalTo(10));
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java
index ba5392a02d..07e2978661 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java
@@ -115,7 +115,6 @@ class EnableDubboConfigTest {
configManager.getProtocol("dubbo").get();
configManager.getProtocol("rest").get();
- configManager.getProtocol("thrift").get();
// asserts aliases
// assertTrue(hasAlias(context, "applicationBean2", "dubbo-demo-application2"));
diff --git a/dubbo-compatible/src/test/resources/META-INF/config.properties b/dubbo-compatible/src/test/resources/META-INF/config.properties
index 51b587ea4f..b22451e116 100644
--- a/dubbo-compatible/src/test/resources/META-INF/config.properties
+++ b/dubbo-compatible/src/test/resources/META-INF/config.properties
@@ -20,7 +20,6 @@ dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880
dubbo.protocols.rest.port=8080
-dubbo.protocols.thrift.port=9090
## monitor
dubbo.monitor.address = zookeeper://127.0.0.1:32770
diff --git a/dubbo-config/dubbo-config-api/pom.xml b/dubbo-config/dubbo-config-api/pom.xml
index 277f8be635..107d69ce8b 100644
--- a/dubbo-config/dubbo-config-api/pom.xml
+++ b/dubbo-config/dubbo-config-api/pom.xml
@@ -136,6 +136,13 @@
test
+
+ org.apache.dubbo
+ dubbo-serialization-jdk
+ ${project.parent.version}
+ test
+
+
org.apache.dubbodubbo-registry-multicast
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 1231b63528..d870a50a86 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -563,6 +563,10 @@ public class ServiceConfig extends ServiceConfigBase {
final boolean serverService = ref instanceof ServerService;
if (serverService) {
serviceDescriptor = ((ServerService) ref).getServiceDescriptor();
+ if (!this.provider.getUseJavaPackageAsPath()) {
+ // for stub service, path always interface name or IDL package name
+ this.path = serviceDescriptor.getInterfaceName();
+ }
repository.registerService(serviceDescriptor);
} else {
serviceDescriptor = repository.registerService(getInterfaceClass());
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ArgumentBuilder.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ArgumentBuilder.java
index 35ef1e001a..7dad7cda5a 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ArgumentBuilder.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ArgumentBuilder.java
@@ -38,6 +38,10 @@ public class ArgumentBuilder {
*/
private Boolean callback;
+ public static ArgumentBuilder newBuilder() {
+ return new ArgumentBuilder();
+ }
+
public ArgumentBuilder index(Integer index) {
this.index = index;
return this;
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ConfigCenterBuilder.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ConfigCenterBuilder.java
index d50bf3dc8e..b7b8c64d38 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ConfigCenterBuilder.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ConfigCenterBuilder.java
@@ -43,6 +43,10 @@ public class ConfigCenterBuilder extends AbstractBuilder parameters;
+ public static ConfigCenterBuilder newBuilder() {
+ return new ConfigCenterBuilder();
+ }
+
public ConfigCenterBuilder protocol(String protocol) {
this.protocol = protocol;
return getThis();
@@ -113,6 +117,7 @@ public class ConfigCenterBuilder extends AbstractBuilder {
+
+ private String protocol;
+
+ /**
+ * Enable jvm metrics when collecting.
+ */
+ private Boolean enableJvm;
+
+ /**
+ * Enable threadpool metrics when collecting.
+ */
+ private Boolean enableThreadpool;
+
+ /**
+ * Enable registry metrics.
+ */
+ private Boolean enableRegistry;
+
+ /**
+ * Enable metadata metrics.
+ */
+ private Boolean enableMetadata;
+
+ /**
+ * Export metrics service.
+ */
+ private Boolean exportMetricsService;
+
+ /**
+ * Enable metrics init.
+ */
+ private Boolean enableMetricsInit;
+
+ /**
+ * Enable collector sync.
+ */
+ private Boolean enableCollectorSync;
+
+ /**
+ * Collector sync period.
+ */
+ private Integer collectorSyncPeriod;
+
+ /**
+ * The prometheus metrics config
+ */
+ private PrometheusConfig prometheus;
+
+ /**
+ * The metrics aggregation config
+ */
+ private AggregationConfig aggregation;
+
+ private HistogramConfig histogram;
+
+ private String exportServiceProtocol;
+
+ private Integer exportServicePort;
+
+ /**
+ * Decide whether to use the global registry of the micrometer.
+ */
+ private Boolean useGlobalRegistry;
+
+ /**
+ * Enable rpc metrics.
+ */
+ private Boolean enableRpc;
+
+ /**
+ * The level of the metrics, the value can be "SERVICE", "METHOD", default is method.
+ */
+ private String rpcLevel;
+
+ public static MetricsBuilder newBuilder() {
+ return new MetricsBuilder();
+ }
+
+ public MetricsBuilder protocol(String protocol) {
+ this.protocol = protocol;
+ return getThis();
+ }
+
+ public MetricsBuilder enableJvm(Boolean enableJvm) {
+ this.enableJvm = enableJvm;
+ return getThis();
+ }
+
+ public MetricsBuilder enableThreadPool(Boolean enableThreadPool) {
+ this.enableThreadpool = enableThreadPool;
+ return getThis();
+ }
+
+ public MetricsBuilder enableRegistry(Boolean enableRegistry) {
+ this.enableRegistry = enableRegistry;
+ return getThis();
+ }
+
+ public MetricsBuilder enableMetadata(Boolean enableMetadata) {
+ this.enableMetadata = enableMetadata;
+ return getThis();
+ }
+
+ public MetricsBuilder exportMetricsService(Boolean exportMetricsService) {
+ this.exportMetricsService = exportMetricsService;
+ return getThis();
+ }
+
+ public MetricsBuilder enableMetricsInit(Boolean enableMetricsInit) {
+ this.enableMetricsInit = enableMetricsInit;
+ return getThis();
+ }
+
+ public MetricsBuilder enableCollectorSync(Boolean enableCollectorSync) {
+ this.enableCollectorSync = enableCollectorSync;
+ return getThis();
+ }
+
+ public MetricsBuilder collectorSyncPeriod(Integer collectorSyncPeriod) {
+ this.collectorSyncPeriod = collectorSyncPeriod;
+ return getThis();
+ }
+
+ public MetricsBuilder prometheus(PrometheusConfig prometheus) {
+ this.prometheus = prometheus;
+ return getThis();
+ }
+
+ public MetricsBuilder aggregation(AggregationConfig aggregation) {
+ this.aggregation = aggregation;
+ return getThis();
+ }
+
+ public MetricsBuilder histogram(HistogramConfig histogram) {
+ this.histogram = histogram;
+ return getThis();
+ }
+
+ public MetricsBuilder exportServiceProtocol(String exportServiceProtocol) {
+ this.exportServiceProtocol = exportServiceProtocol;
+ return getThis();
+ }
+
+ public MetricsBuilder exportServicePort(Integer exportServicePort) {
+ this.exportServicePort = exportServicePort;
+ return getThis();
+ }
+
+ public MetricsBuilder useGlobalRegistry(Boolean useGlobalRegistry) {
+ this.useGlobalRegistry = useGlobalRegistry;
+ return getThis();
+ }
+
+ public MetricsBuilder enableRpc(Boolean enableRpc) {
+ this.enableRpc = enableRpc;
+ return getThis();
+ }
+
+ public MetricsBuilder rpcLevel(String rpcLevel) {
+ this.rpcLevel = rpcLevel;
+ return getThis();
+ }
+
+ @Override
+ public MetricsConfig build() {
+ MetricsConfig metrics = new MetricsConfig();
+ super.build(metrics);
+
+ metrics.setProtocol(protocol);
+ metrics.setEnableJvm(enableJvm);
+ metrics.setEnableThreadpool(enableThreadpool);
+ metrics.setEnableRegistry(enableRegistry);
+ metrics.setEnableMetadata(enableMetadata);
+ metrics.setExportMetricsService(exportMetricsService);
+ metrics.setEnableMetricsInit(enableMetricsInit);
+ metrics.setEnableCollectorSync(enableCollectorSync);
+ metrics.setCollectorSyncPeriod(collectorSyncPeriod);
+ metrics.setPrometheus(prometheus);
+ metrics.setAggregation(aggregation);
+ metrics.setHistogram(histogram);
+ metrics.setExportServiceProtocol(exportServiceProtocol);
+ metrics.setExportServicePort(exportServicePort);
+ metrics.setUseGlobalRegistry(useGlobalRegistry);
+ metrics.setEnableRpc(enableRpc);
+ metrics.setRpcLevel(rpcLevel);
+ return metrics;
+ }
+
+ @Override
+ protected MetricsBuilder getThis() {
+ return this;
+ }
+}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ModuleBuilder.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ModuleBuilder.java
index d1efe79645..ea3c379b6b 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ModuleBuilder.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/ModuleBuilder.java
@@ -64,6 +64,10 @@ public class ModuleBuilder extends AbstractBuilder
*/
private Boolean isDefault;
+ public static ModuleBuilder newBuilder() {
+ return new ModuleBuilder();
+ }
+
public ModuleBuilder name(String name) {
this.name = name;
return getThis();
@@ -110,6 +114,7 @@ public class ModuleBuilder extends AbstractBuilder
return getThis();
}
+ @Override
public ModuleConfig build() {
ModuleConfig moduleConfig = new ModuleConfig();
super.build(moduleConfig);
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/MonitorBuilder.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/MonitorBuilder.java
index 7a733c3045..d819cf25f8 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/MonitorBuilder.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/MonitorBuilder.java
@@ -63,6 +63,10 @@ public class MonitorBuilder extends AbstractBuilder parameters;
+ private Boolean sslEnabled;
+
+ /*
+ * Extra Protocol for this service, using Port Unification Server
+ */
+ private String extProtocol;
+
/**
* If it's default
*/
@@ -375,11 +382,22 @@ public class ProtocolBuilder extends AbstractBuilder extends AbstractReferenceBuilder build() {
ReferenceConfig reference = new ReferenceConfig<>();
super.build(reference);
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/RegistryBuilder.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/RegistryBuilder.java
index c12b4e95c6..34821832c6 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/RegistryBuilder.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/RegistryBuilder.java
@@ -340,6 +340,7 @@ public class RegistryBuilder extends AbstractBuilder extends AbstractServiceBuilder,
// throw new IllegalArgumentException("mock doesn't support on provider side");
// }
+ @Override
public ServiceConfig build() {
ServiceConfig serviceConfig = new ServiceConfig<>();
super.build(serviceConfig);
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
index 635e3a6165..810e862cd3 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
@@ -133,6 +133,7 @@ import static org.apache.dubbo.remoting.Constants.CLIENT_KEY;
import static org.apache.dubbo.remoting.Constants.CODEC_KEY;
import static org.apache.dubbo.remoting.Constants.DISPATCHER_KEY;
import static org.apache.dubbo.remoting.Constants.EXCHANGER_KEY;
+import static org.apache.dubbo.remoting.Constants.PREFER_SERIALIZATION_KEY;
import static org.apache.dubbo.remoting.Constants.SERIALIZATION_KEY;
import static org.apache.dubbo.remoting.Constants.SERVER_KEY;
import static org.apache.dubbo.remoting.Constants.TELNET_KEY;
@@ -561,6 +562,11 @@ public class ConfigValidationUtils {
checkMultiExtension(config.getScopeModel(), Codec2.class, CODEC_KEY, config.getCodec());
checkMultiExtension(
config.getScopeModel(), Serialization.class, SERIALIZATION_KEY, config.getSerialization());
+ checkMultiExtension(
+ config.getScopeModel(),
+ Serialization.class,
+ PREFER_SERIALIZATION_KEY,
+ config.getPreferSerialization());
checkMultiExtension(config.getScopeModel(), Transporter.class, SERVER_KEY, config.getServer());
checkMultiExtension(config.getScopeModel(), Transporter.class, CLIENT_KEY, config.getClient());
}
@@ -582,6 +588,9 @@ public class ConfigValidationUtils {
checkMultiExtension(config.getScopeModel(), StatusChecker.class, STATUS_KEY, config.getStatus());
checkExtension(config.getScopeModel(), Transporter.class, TRANSPORTER_KEY, config.getTransporter());
checkExtension(config.getScopeModel(), Exchanger.class, EXCHANGER_KEY, config.getExchanger());
+ checkMultiExtension(config.getScopeModel(), Serialization.class, SERIALIZATION_KEY, config.getSerialization());
+ checkMultiExtension(
+ config.getScopeModel(), Serialization.class, PREFER_SERIALIZATION_KEY, config.getPreferSerialization());
}
public static void validateConsumerConfig(ConsumerConfig config) {
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
index edaa1955b4..963e44eb28 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
@@ -70,6 +70,31 @@ class AbstractConfigTest {
ConfigValidationUtils.validateProtocolConfig(protocolConfig);
}
+ @Test
+ void testValidateProtocolConfigSerialization() {
+ ProtocolConfig protocolConfig = new ProtocolConfig();
+ protocolConfig.setCodec("exchange");
+ protocolConfig.setName("dubbo");
+ protocolConfig.setHost("host");
+ protocolConfig.setSerialization("fastjson2");
+ protocolConfig.setPreferSerialization("hessian2,java,compactedjava,nativejava");
+ ConfigValidationUtils.validateProtocolConfig(protocolConfig);
+ }
+
+ @Test
+ void testValidateProtocolConfigViolateSerialization() {
+
+ Assertions.assertThrowsExactly(IllegalStateException.class, () -> {
+ ProtocolConfig protocolConfig = new ProtocolConfig();
+ protocolConfig.setCodec("exchange");
+ protocolConfig.setName("dubbo");
+ protocolConfig.setHost("host");
+ protocolConfig.setSerialization("violate");
+ protocolConfig.setPreferSerialization("violate");
+ ConfigValidationUtils.validateProtocolConfig(protocolConfig);
+ });
+ }
+
@Test
void testAppendParameters1() {
Map parameters = new HashMap();
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java
index 07c3e16693..313b0c4f58 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java
@@ -32,47 +32,47 @@ import static org.hamcrest.Matchers.not;
class ProviderConfigTest {
@Test
- void testProtocol() throws Exception {
+ void testProtocol() {
ProviderConfig provider = new ProviderConfig();
provider.setProtocol("protocol");
assertThat(provider.getProtocol().getName(), equalTo("protocol"));
}
@Test
- void testDefault() throws Exception {
+ void testDefault() {
ProviderConfig provider = new ProviderConfig();
provider.setDefault(true);
- Map parameters = new HashMap();
+ Map parameters = new HashMap<>();
ProviderConfig.appendParameters(parameters, provider);
assertThat(provider.isDefault(), is(true));
assertThat(parameters, not(hasKey("default")));
}
@Test
- void testHost() throws Exception {
+ void testHost() {
ProviderConfig provider = new ProviderConfig();
provider.setHost("demo-host");
- Map parameters = new HashMap();
+ Map parameters = new HashMap<>();
ProviderConfig.appendParameters(parameters, provider);
assertThat(provider.getHost(), equalTo("demo-host"));
assertThat(parameters, not(hasKey("host")));
}
@Test
- void testPort() throws Exception {
+ void testPort() {
ProviderConfig provider = new ProviderConfig();
provider.setPort(8080);
- Map parameters = new HashMap();
+ Map parameters = new HashMap<>();
ProviderConfig.appendParameters(parameters, provider);
assertThat(provider.getPort(), is(8080));
assertThat(parameters, not(hasKey("port")));
}
@Test
- void testPath() throws Exception {
+ void testPath() {
ProviderConfig provider = new ProviderConfig();
provider.setPath("/path");
- Map parameters = new HashMap();
+ Map parameters = new HashMap<>();
ProviderConfig.appendParameters(parameters, provider);
assertThat(provider.getPath(), equalTo("/path"));
assertThat(provider.getContextpath(), equalTo("/path"));
@@ -80,139 +80,153 @@ class ProviderConfigTest {
}
@Test
- void testContextPath() throws Exception {
+ void testContextPath() {
ProviderConfig provider = new ProviderConfig();
provider.setContextpath("/context-path");
- Map parameters = new HashMap();
+ Map parameters = new HashMap<>();
ProviderConfig.appendParameters(parameters, provider);
assertThat(provider.getContextpath(), equalTo("/context-path"));
assertThat(parameters, not(hasKey("/context-path")));
}
@Test
- void testThreadpool() throws Exception {
+ void testThreadpool() {
ProviderConfig provider = new ProviderConfig();
provider.setThreadpool("mockthreadpool");
assertThat(provider.getThreadpool(), equalTo("mockthreadpool"));
}
@Test
- void testThreads() throws Exception {
+ void testThreadname() {
+ ProviderConfig provider = new ProviderConfig();
+ provider.setThreadname("test-thread-pool");
+ assertThat(provider.getThreadname(), equalTo("test-thread-pool"));
+ }
+
+ @Test
+ void testThreads() {
ProviderConfig provider = new ProviderConfig();
provider.setThreads(10);
assertThat(provider.getThreads(), is(10));
}
@Test
- void testIothreads() throws Exception {
+ void testIothreads() {
ProviderConfig provider = new ProviderConfig();
provider.setIothreads(10);
assertThat(provider.getIothreads(), is(10));
}
@Test
- void testQueues() throws Exception {
+ void testAlive() {
+ ProviderConfig provider = new ProviderConfig();
+ provider.setAlive(10);
+ assertThat(provider.getAlive(), is(10));
+ }
+
+ @Test
+ void testQueues() {
ProviderConfig provider = new ProviderConfig();
provider.setQueues(10);
assertThat(provider.getQueues(), is(10));
}
@Test
- void testAccepts() throws Exception {
+ void testAccepts() {
ProviderConfig provider = new ProviderConfig();
provider.setAccepts(10);
assertThat(provider.getAccepts(), is(10));
}
@Test
- void testCharset() throws Exception {
+ void testCharset() {
ProviderConfig provider = new ProviderConfig();
provider.setCharset("utf-8");
assertThat(provider.getCharset(), equalTo("utf-8"));
}
@Test
- void testPayload() throws Exception {
+ void testPayload() {
ProviderConfig provider = new ProviderConfig();
provider.setPayload(10);
assertThat(provider.getPayload(), is(10));
}
@Test
- void testBuffer() throws Exception {
+ void testBuffer() {
ProviderConfig provider = new ProviderConfig();
provider.setBuffer(10);
assertThat(provider.getBuffer(), is(10));
}
@Test
- void testServer() throws Exception {
+ void testServer() {
ProviderConfig provider = new ProviderConfig();
provider.setServer("demo-server");
assertThat(provider.getServer(), equalTo("demo-server"));
}
@Test
- void testClient() throws Exception {
+ void testClient() {
ProviderConfig provider = new ProviderConfig();
provider.setClient("client");
assertThat(provider.getClient(), equalTo("client"));
}
@Test
- void testTelnet() throws Exception {
+ void testTelnet() {
ProviderConfig provider = new ProviderConfig();
provider.setTelnet("mocktelnethandler");
assertThat(provider.getTelnet(), equalTo("mocktelnethandler"));
}
@Test
- void testPrompt() throws Exception {
+ void testPrompt() {
ProviderConfig provider = new ProviderConfig();
provider.setPrompt("#");
- Map parameters = new HashMap();
+ Map parameters = new HashMap<>();
ProviderConfig.appendParameters(parameters, provider);
assertThat(provider.getPrompt(), equalTo("#"));
assertThat(parameters, hasEntry("prompt", "%23"));
}
@Test
- void testStatus() throws Exception {
+ void testStatus() {
ProviderConfig provider = new ProviderConfig();
provider.setStatus("mockstatuschecker");
assertThat(provider.getStatus(), equalTo("mockstatuschecker"));
}
@Test
- void testTransporter() throws Exception {
+ void testTransporter() {
ProviderConfig provider = new ProviderConfig();
provider.setTransporter("mocktransporter");
assertThat(provider.getTransporter(), equalTo("mocktransporter"));
}
@Test
- void testExchanger() throws Exception {
+ void testExchanger() {
ProviderConfig provider = new ProviderConfig();
provider.setExchanger("mockexchanger");
assertThat(provider.getExchanger(), equalTo("mockexchanger"));
}
@Test
- void testDispatcher() throws Exception {
+ void testDispatcher() {
ProviderConfig provider = new ProviderConfig();
provider.setDispatcher("mockdispatcher");
assertThat(provider.getDispatcher(), equalTo("mockdispatcher"));
}
@Test
- void testNetworker() throws Exception {
+ void testNetworker() {
ProviderConfig provider = new ProviderConfig();
provider.setNetworker("networker");
assertThat(provider.getNetworker(), equalTo("networker"));
}
@Test
- void testWait() throws Exception {
+ void testWait() {
ProviderConfig provider = new ProviderConfig();
provider.setWait(10);
assertThat(provider.getWait(), equalTo(10));
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ConsulDubboServiceConsumerBootstrap.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ConsulDubboServiceConsumerBootstrap.java
deleted file mode 100644
index c72c843676..0000000000
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ConsulDubboServiceConsumerBootstrap.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.bootstrap;
-
-import org.apache.dubbo.config.bootstrap.rest.UserService;
-
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
-
-/**
- * Dubbo Provider Bootstrap
- *
- * @since 2.7.5
- */
-public class ConsulDubboServiceConsumerBootstrap {
-
- public static void main(String[] args) throws Exception {
-
- DubboBootstrap bootstrap = DubboBootstrap.getInstance()
- .application("consul-dubbo-consumer", app -> app.metadata(DEFAULT_METADATA_STORAGE_TYPE))
- .registry("zookeeper", builder -> builder.address(
- "consul://127.0.0.1:8500?registry-type=service&subscribed-services=consul-dubbo-provider")
- .useAsConfigCenter(true)
- .useAsMetadataCenter(true))
- .reference("echo", builder -> builder.interfaceClass(EchoService.class)
- .protocol("dubbo"))
- .reference("user", builder -> builder.interfaceClass(UserService.class)
- .protocol("rest"))
- .start();
-
- EchoService echoService = bootstrap.getCache().get(EchoService.class);
- UserService userService = bootstrap.getCache().get(UserService.class);
-
- for (int i = 0; i < 5; i++) {
- Thread.sleep(2000L);
- System.out.println(echoService.echo("Hello,World"));
- System.out.println(userService.getUser(i * 1L));
- }
-
- bootstrap.stop();
- }
-}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ConsulDubboServiceProviderBootstrap.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ConsulDubboServiceProviderBootstrap.java
deleted file mode 100644
index a08d876eb0..0000000000
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ConsulDubboServiceProviderBootstrap.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.bootstrap;
-
-import org.apache.dubbo.config.bootstrap.rest.UserService;
-import org.apache.dubbo.config.bootstrap.rest.UserServiceImpl;
-
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
-
-/**
- * TODO
- */
-public class ConsulDubboServiceProviderBootstrap {
-
- public static void main(String[] args) {
- DubboBootstrap.getInstance()
- .application("consul-dubbo-provider", app -> app.metadata(DEFAULT_METADATA_STORAGE_TYPE))
- .registry(builder -> builder.address("consul://127.0.0.1:8500?registry-type=service")
- .useAsConfigCenter(true)
- .useAsMetadataCenter(true))
- .protocol("dubbo", builder -> builder.port(-1).name("dubbo"))
- .protocol("rest", builder -> builder.port(8081).name("rest"))
- .service("echo", builder -> builder.interfaceClass(EchoService.class)
- .ref(new EchoServiceImpl())
- .protocolIds("dubbo"))
- .service("user", builder -> builder.interfaceClass(UserService.class)
- .ref(new UserServiceImpl())
- .protocolIds("rest"))
- .start()
- .await();
- }
-}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
index 2d4c1e625a..c107e9b431 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
@@ -319,21 +319,6 @@ class DubboBootstrapTest {
registryConfig.setUseAsMetadataCenter(false);
registryConfig.setUseAsConfigCenter(false);
- Exception exception = null;
- try {
- DubboBootstrap.getInstance()
- .application(applicationConfig)
- .registry(registryConfig)
- .protocol(new ProtocolConfig(CommonConstants.DUBBO_PROTOCOL, -1))
- .service(service)
- .start();
- } catch (Exception e) {
- exception = e;
- DubboBootstrap.reset();
- }
-
- Assertions.assertNotNull(exception);
-
DubboBootstrap.getInstance()
.application(applicationConfig)
.registry(registryConfig)
@@ -345,6 +330,33 @@ class DubboBootstrapTest {
assertMetadataService(DubboBootstrap.getInstance(), availablePort, false);
}
+ @Test
+ void testRemoteMetadataServiceExporterCheckMetadataType() {
+
+ Assertions.assertThrowsExactly(IllegalStateException.class, () -> {
+ ServiceConfig service = new ServiceConfig<>();
+ service.setInterface(DemoService.class);
+ service.setRef(new DemoServiceImpl());
+
+ int availablePort = NetUtils.getAvailablePort();
+
+ ApplicationConfig applicationConfig = new ApplicationConfig("bootstrap-test");
+ applicationConfig.setMetadataServicePort(availablePort);
+ applicationConfig.setMetadataType(REMOTE_METADATA_STORAGE_TYPE);
+
+ RegistryConfig registryConfig = new RegistryConfig(zkServerAddress);
+ registryConfig.setUseAsMetadataCenter(false);
+ registryConfig.setUseAsConfigCenter(false);
+
+ DubboBootstrap.getInstance()
+ .application(applicationConfig)
+ .registry(registryConfig)
+ .protocol(new ProtocolConfig(CommonConstants.DUBBO_PROTOCOL, -1))
+ .service(service)
+ .start();
+ });
+ }
+
private ExporterDeployListener getListener(ApplicationModel model) {
return (ExporterDeployListener)
model.getExtensionLoader(ApplicationDeployListener.class).getExtension("exporter");
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceConsumerBootstrap.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceConsumerBootstrap.java
index 28971f1689..1c3f5fd96c 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceConsumerBootstrap.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceConsumerBootstrap.java
@@ -32,24 +32,11 @@ public class DubboServiceConsumerBootstrap {
DubboBootstrap bootstrap = DubboBootstrap.getInstance()
.application("dubbo-consumer-demo")
.protocol(builder -> builder.port(20887).name("dubbo"))
- // Eureka
- // .registry(builder ->
- // builder.address("eureka://127.0.0.1:8761?registry-type=service&subscribed-services=dubbo-provider-demo"))
-
- // Zookeeper
.registry(
"zookeeper",
builder -> builder.address(ZookeeperRegistryCenterConfig.getConnectionAddress()
+ "?registry-type=service&subscribed-services=dubbo-provider-demo"))
.metadataReport(new MetadataReportConfig(ZookeeperRegistryCenterConfig.getConnectionAddress()))
-
- // Nacos
- // .registry("nacos", builder ->
- // builder.address("nacos://127.0.0.1:8848?registry.type=service&subscribed.services=dubbo-provider-demo"))
-
- // Consul
- // .registry("consul", builder ->
- // builder.address("consul://127.0.0.1:8500?registry.type=service&subscribed.services=dubbo-provider-demo").group("namespace1"))
.reference("echo", builder -> builder.interfaceClass(EchoService.class)
.protocol("dubbo"))
.reference("user", builder -> builder.interfaceClass(UserService.class)
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderBootstrap.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderBootstrap.java
index 945d3ba79a..2fef821a9b 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderBootstrap.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderBootstrap.java
@@ -55,27 +55,17 @@ public class DubboServiceProviderBootstrap {
ServiceConfig echoService = new ServiceConfig<>();
echoService.setInterface(EchoService.class.getName());
echoService.setRef(new EchoServiceImpl());
- // echoService.setRegistries(Arrays.asList(interfaceRegistry, serviceRegistry));
ServiceConfig userService = new ServiceConfig<>();
userService.setInterface(UserService.class.getName());
userService.setRef(new UserServiceImpl());
userService.setProtocol(restProtocol);
- // userService.setRegistries(Arrays.asList(interfaceRegistry, serviceRegistry));
ApplicationConfig applicationConfig = new ApplicationConfig("dubbo-provider-demo");
applicationConfig.setMetadataType("remote");
DubboBootstrap.getInstance()
.application(applicationConfig)
- // Zookeeper in service registry type
- // .registry("zookeeper", builder ->
- // builder.address("zookeeper://127.0.0.1:2181?registry.type=service"))
- // Nacos
- // .registry("zookeeper", builder ->
- // builder.address("nacos://127.0.0.1:8848?registry.type=service"))
.registries(Arrays.asList(interfaceRegistry, serviceRegistry))
- //
- // .registry(RegistryBuilder.newBuilder().address("consul://127.0.0.1:8500?registry.type=service").build())
.protocol(builder -> builder.port(-1).name("dubbo"))
.metadataReport(new MetadataReportConfig(ZookeeperRegistryCenterConfig.getConnectionAddress()))
.service(echoService)
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderMinimumBootstrap.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderMinimumBootstrap.java
index f22154b683..f291f5a821 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderMinimumBootstrap.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderMinimumBootstrap.java
@@ -30,7 +30,6 @@ public class DubboServiceProviderMinimumBootstrap {
.application("dubbo-provider-demo")
.registry(builder -> builder.address(
ZookeeperRegistryCenterConfig.getConnectionAddress() + "?registry-type=service"))
- // .registry(builder -> builder.address("eureka://127.0.0.1:8761?registry-type=service"))
.protocol(builder -> builder.port(-1).name("dubbo"))
.service("echo", builder -> builder.interfaceClass(EchoService.class)
.ref(new EchoServiceImpl()))
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/EtcdDubboServiceConsumerBootstrap.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/EtcdDubboServiceConsumerBootstrap.java
deleted file mode 100644
index 729211830a..0000000000
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/EtcdDubboServiceConsumerBootstrap.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.bootstrap;
-
-import org.apache.dubbo.config.MetadataReportConfig;
-import org.apache.dubbo.config.bootstrap.rest.UserService;
-
-/**
- * Dubbo Provider Bootstrap
- *
- * @since 2.7.5
- */
-public class EtcdDubboServiceConsumerBootstrap {
-
- public static void main(String[] args) throws Exception {
-
- DubboBootstrap bootstrap = DubboBootstrap.getInstance()
- .application("dubbo-consumer-demo")
- // Zookeeper
- .protocol(builder -> builder.port(20887).name("dubbo"))
- .registry(
- "etcd3",
- builder -> builder.address(
- "etcd3://127.0.0.1:2379?registry-type=service&subscribed-services=dubbo-provider-demo"))
- .metadataReport(new MetadataReportConfig("etcd://127.0.0.1:2379"))
- // Nacos
- // .registry("consul", builder ->
- // builder.address("consul://127.0.0.1:8500?registry.type=service&subscribed.services=dubbo-provider-demo").group("namespace1"))
- .reference("echo", builder -> builder.interfaceClass(EchoService.class)
- .protocol("dubbo"))
- .reference("user", builder -> builder.interfaceClass(UserService.class)
- .protocol("rest"))
- .start();
-
- EchoService echoService = bootstrap.getCache().get(EchoService.class);
-
- for (int i = 0; i < 500; i++) {
- Thread.sleep(2000L);
- System.out.println(echoService.echo("Hello,World"));
- }
- }
-}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/EtcdDubboServiceProviderBootstrap.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/EtcdDubboServiceProviderBootstrap.java
deleted file mode 100644
index 7647448fa3..0000000000
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/EtcdDubboServiceProviderBootstrap.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.bootstrap;
-
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ProtocolConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.config.ServiceConfig;
-import org.apache.dubbo.config.bootstrap.rest.UserService;
-import org.apache.dubbo.config.bootstrap.rest.UserServiceImpl;
-
-import java.util.Arrays;
-
-/**
- * Dubbo Provider Bootstrap
- *
- * @since 2.7.5
- */
-public class EtcdDubboServiceProviderBootstrap {
-
- public static void main(String[] args) {
- multipleRegistries();
- }
-
- private static void multipleRegistries() {
- ProtocolConfig restProtocol = new ProtocolConfig();
- restProtocol.setName("rest");
- restProtocol.setId("rest");
- restProtocol.setPort(-1);
-
- RegistryConfig interfaceRegistry = new RegistryConfig();
- interfaceRegistry.setId("interfaceRegistry");
- interfaceRegistry.setAddress("etcd3://127.0.0.1:2379");
-
- RegistryConfig serviceRegistry = new RegistryConfig();
- serviceRegistry.setId("serviceRegistry");
- serviceRegistry.setAddress("etcd3://127.0.0.1:2379?registry-type=service");
-
- ServiceConfig echoService = new ServiceConfig<>();
- echoService.setInterface(EchoService.class.getName());
- echoService.setRef(new EchoServiceImpl());
- // echoService.setRegistries(Arrays.asList(interfaceRegistry, serviceRegistry));
-
- ServiceConfig userService = new ServiceConfig<>();
- userService.setInterface(UserService.class.getName());
- userService.setRef(new UserServiceImpl());
- userService.setProtocol(restProtocol);
- // userService.setRegistries(Arrays.asList(interfaceRegistry, serviceRegistry));
-
- ApplicationConfig applicationConfig = new ApplicationConfig("dubbo-provider-demo");
- // applicationConfig.setMetadataType("remote");
- DubboBootstrap.getInstance()
- .application(applicationConfig)
- // Zookeeper in service registry type
- // .registry("zookeeper", builder ->
- // builder.address("zookeeper://127.0.0.1:2181?registry.type=service"))
- // Nacos
- // .registry("zookeeper", builder ->
- // builder.address("nacos://127.0.0.1:8848?registry.type=service"))
- .registries(Arrays.asList(interfaceRegistry, serviceRegistry))
- //
- // .registry(RegistryBuilder.newBuilder().address("consul://127.0.0.1:8500?registry.type=service").build())
- .protocol(builder -> builder.port(-1).name("dubbo"))
- // .metadataReport(new MetadataReportConfig("etcd://127.0.0.1:2379"))
- .service(echoService)
- .service(userService)
- .start()
- .await();
- }
-
- private static void testSCCallDubbo() {}
-
- private static void testDubboCallSC() {}
-
- private static void testDubboTansormation() {}
-}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ArgumentBuilderTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ArgumentBuilderTest.java
index 3fe6d31c5e..c8b0160f25 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ArgumentBuilderTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ArgumentBuilderTest.java
@@ -25,21 +25,21 @@ class ArgumentBuilderTest {
@Test
void index() {
- ArgumentBuilder builder = new ArgumentBuilder();
+ ArgumentBuilder builder = ArgumentBuilder.newBuilder();
builder.index(1);
Assertions.assertEquals(1, builder.build().getIndex());
}
@Test
void type() {
- ArgumentBuilder builder = new ArgumentBuilder();
+ ArgumentBuilder builder = ArgumentBuilder.newBuilder();
builder.type("int");
Assertions.assertEquals("int", builder.build().getType());
}
@Test
void callback() {
- ArgumentBuilder builder = new ArgumentBuilder();
+ ArgumentBuilder builder = ArgumentBuilder.newBuilder();
builder.callback(true);
Assertions.assertTrue(builder.build().isCallback());
builder.callback(false);
@@ -48,7 +48,7 @@ class ArgumentBuilderTest {
@Test
void build() {
- ArgumentBuilder builder = new ArgumentBuilder();
+ ArgumentBuilder builder = ArgumentBuilder.newBuilder();
builder.index(1).type("int").callback(true);
ArgumentConfig argument1 = builder.build();
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ConfigCenterBuilderTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ConfigCenterBuilderTest.java
index 802e3d64bc..a023a30d78 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ConfigCenterBuilderTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ConfigCenterBuilderTest.java
@@ -28,91 +28,91 @@ class ConfigCenterBuilderTest {
@Test
void protocol() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.protocol("protocol");
Assertions.assertEquals("protocol", builder.build().getProtocol());
}
@Test
void address() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.address("address");
Assertions.assertEquals("address", builder.build().getAddress());
}
@Test
void cluster() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.cluster("cluster");
Assertions.assertEquals("cluster", builder.build().getCluster());
}
@Test
void namespace() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.namespace("namespace");
Assertions.assertEquals("namespace", builder.build().getNamespace());
}
@Test
void group() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.group("group");
Assertions.assertEquals("group", builder.build().getGroup());
}
@Test
void username() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.username("username");
Assertions.assertEquals("username", builder.build().getUsername());
}
@Test
void password() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.password("password");
Assertions.assertEquals("password", builder.build().getPassword());
}
@Test
void timeout() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.timeout(1000L);
Assertions.assertEquals(1000L, builder.build().getTimeout());
}
@Test
void highestPriority() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.highestPriority(true);
Assertions.assertTrue(builder.build().isHighestPriority());
}
@Test
void check() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.check(true);
Assertions.assertTrue(builder.build().isCheck());
}
@Test
void configFile() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.configFile("configFile");
Assertions.assertEquals("configFile", builder.build().getConfigFile());
}
@Test
void appConfigFile() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.appConfigFile("appConfigFile");
Assertions.assertEquals("appConfigFile", builder.build().getAppConfigFile());
}
@Test
void appendParameter() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.appendParameter("default.num", "one").appendParameter("num", "ONE");
Map parameters = builder.build().getParameters();
@@ -127,7 +127,7 @@ class ConfigCenterBuilderTest {
source.put("default.num", "one");
source.put("num", "ONE");
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.appendParameters(source);
Map parameters = builder.build().getParameters();
@@ -138,7 +138,7 @@ class ConfigCenterBuilderTest {
@Test
void build() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
+ ConfigCenterBuilder builder = ConfigCenterBuilder.newBuilder();
builder.check(true)
.protocol("protocol")
.address("address")
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ConsumerBuilderTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ConsumerBuilderTest.java
index 7aa88fcd8e..6dfbf14cd2 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ConsumerBuilderTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ConsumerBuilderTest.java
@@ -25,56 +25,56 @@ class ConsumerBuilderTest {
@Test
void isDefault() {
- ConsumerBuilder builder = new ConsumerBuilder();
+ ConsumerBuilder builder = ConsumerBuilder.newBuilder();
builder.isDefault(false);
Assertions.assertFalse(builder.build().isDefault());
}
@Test
void client() {
- ConsumerBuilder builder = new ConsumerBuilder();
+ ConsumerBuilder builder = ConsumerBuilder.newBuilder();
builder.client("client");
Assertions.assertEquals("client", builder.build().getClient());
}
@Test
void threadPool() {
- ConsumerBuilder builder = new ConsumerBuilder();
+ ConsumerBuilder builder = ConsumerBuilder.newBuilder();
builder.threadPool("threadPool");
Assertions.assertEquals("threadPool", builder.build().getThreadpool());
}
@Test
void coreThreads() {
- ConsumerBuilder builder = new ConsumerBuilder();
+ ConsumerBuilder builder = ConsumerBuilder.newBuilder();
builder.coreThreads(10);
Assertions.assertEquals(10, builder.build().getCorethreads());
}
@Test
void threads() {
- ConsumerBuilder builder = new ConsumerBuilder();
+ ConsumerBuilder builder = ConsumerBuilder.newBuilder();
builder.threads(100);
Assertions.assertEquals(100, builder.build().getThreads());
}
@Test
void queues() {
- ConsumerBuilder builder = new ConsumerBuilder();
+ ConsumerBuilder builder = ConsumerBuilder.newBuilder();
builder.queues(200);
Assertions.assertEquals(200, builder.build().getQueues());
}
@Test
void shareConnections() {
- ConsumerBuilder builder = new ConsumerBuilder();
+ ConsumerBuilder builder = ConsumerBuilder.newBuilder();
builder.shareConnections(300);
Assertions.assertEquals(300, builder.build().getShareconnections());
}
@Test
void build() {
- ConsumerBuilder builder = new ConsumerBuilder();
+ ConsumerBuilder builder = ConsumerBuilder.newBuilder();
builder.isDefault(true)
.client("client")
.threadPool("threadPool")
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MethodBuilderTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MethodBuilderTest.java
index 2c0855ac40..877c23ba22 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MethodBuilderTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MethodBuilderTest.java
@@ -28,98 +28,98 @@ class MethodBuilderTest {
@Test
void name() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.name("name");
Assertions.assertEquals("name", builder.build().getName());
}
@Test
void stat() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.stat(1);
Assertions.assertEquals(1, builder.build().getStat());
}
@Test
void retry() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.retry(true);
Assertions.assertTrue(builder.build().isRetry());
}
@Test
void reliable() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.reliable(true);
Assertions.assertTrue(builder.build().isReliable());
}
@Test
void executes() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.executes(1);
Assertions.assertEquals(1, builder.build().getExecutes());
}
@Test
void deprecated() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.deprecated(true);
Assertions.assertTrue(builder.build().getDeprecated());
}
@Test
void sticky() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.sticky(true);
Assertions.assertTrue(builder.build().getSticky());
}
@Test
void isReturn() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.isReturn(true);
Assertions.assertTrue(builder.build().isReturn());
}
@Test
void oninvoke() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.oninvoke("on-invoke-object");
Assertions.assertEquals("on-invoke-object", builder.build().getOninvoke());
}
@Test
void oninvokeMethod() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.oninvokeMethod("on-invoke-method");
Assertions.assertEquals("on-invoke-method", builder.build().getOninvokeMethod());
}
@Test
void onreturn() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.onreturn("on-return-object");
Assertions.assertEquals("on-return-object", builder.build().getOnreturn());
}
@Test
void onreturnMethod() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.onreturnMethod("on-return-method");
Assertions.assertEquals("on-return-method", builder.build().getOnreturnMethod());
}
@Test
void onthrow() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.onthrow("on-throw-object");
Assertions.assertEquals("on-throw-object", builder.build().getOnthrow());
}
@Test
void onthrowMethod() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.onthrowMethod("on-throw-method");
Assertions.assertEquals("on-throw-method", builder.build().getOnthrowMethod());
}
@@ -127,7 +127,7 @@ class MethodBuilderTest {
@Test
void addArguments() {
ArgumentConfig argument = new ArgumentConfig();
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.addArguments(Collections.singletonList(argument));
Assertions.assertTrue(builder.build().getArguments().contains(argument));
Assertions.assertEquals(1, builder.build().getArguments().size());
@@ -136,7 +136,7 @@ class MethodBuilderTest {
@Test
void addArgument() {
ArgumentConfig argument = new ArgumentConfig();
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.addArgument(argument);
Assertions.assertTrue(builder.build().getArguments().contains(argument));
Assertions.assertEquals(1, builder.build().getArguments().size());
@@ -144,14 +144,14 @@ class MethodBuilderTest {
@Test
void service() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.service("service");
Assertions.assertEquals("service", builder.build().getService());
}
@Test
void serviceId() {
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.serviceId("serviceId");
Assertions.assertEquals("serviceId", builder.build().getServiceId());
}
@@ -159,7 +159,7 @@ class MethodBuilderTest {
@Test
void build() {
ArgumentConfig argument = new ArgumentConfig();
- MethodBuilder builder = new MethodBuilder();
+ MethodBuilder builder = MethodBuilder.newBuilder();
builder.name("name")
.stat(1)
.retry(true)
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MetricsBuilderTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MetricsBuilderTest.java
new file mode 100644
index 0000000000..7d2916ed43
--- /dev/null
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MetricsBuilderTest.java
@@ -0,0 +1,303 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.config.bootstrap.builders;
+
+import org.apache.dubbo.config.MetricsConfig;
+import org.apache.dubbo.config.nested.AggregationConfig;
+import org.apache.dubbo.config.nested.HistogramConfig;
+import org.apache.dubbo.config.nested.PrometheusConfig;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class MetricsBuilderTest {
+
+ @Test
+ void protocol() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.protocol("test");
+ Assertions.assertEquals("test", builder.build().getProtocol());
+ }
+
+ @Test
+ void enableJvm() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.enableJvm(true);
+ Assertions.assertTrue(builder.build().getEnableJvm());
+ }
+
+ @Test
+ void enableThreadPool() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.enableThreadPool(false);
+ Assertions.assertFalse(builder.build().getEnableThreadpool());
+ }
+
+ @Test
+ void enableRegistry() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.enableRegistry(true);
+ Assertions.assertTrue(builder.build().getEnableRegistry());
+ }
+
+ @Test
+ void enableMetadata() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.enableMetadata(true);
+ Assertions.assertTrue(builder.build().getEnableMetadata());
+ }
+
+ @Test
+ void exportMetricsService() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.exportMetricsService(false);
+ Assertions.assertFalse(builder.build().getExportMetricsService());
+ }
+
+ @Test
+ void enableMetricsInit() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.enableMetricsInit(true);
+ Assertions.assertTrue(builder.build().getEnableMetricsInit());
+ }
+
+ @Test
+ void enableCollectorSync() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.enableCollectorSync(true);
+ Assertions.assertTrue(builder.build().getEnableCollectorSync());
+ }
+
+ @Test
+ void collectorSyncPeriod() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.collectorSyncPeriod(10);
+ Assertions.assertEquals(10, builder.build().getCollectorSyncPeriod());
+ }
+
+ @Test
+ void exportServiceProtocol() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.exportServiceProtocol("tri");
+ Assertions.assertEquals("tri", builder.build().getExportServiceProtocol());
+ }
+
+ @Test
+ void exportServicePort() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.exportServicePort(2999);
+ Assertions.assertEquals(2999, builder.build().getExportServicePort());
+ }
+
+ @Test
+ void useGlobalRegistry() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.useGlobalRegistry(true);
+ Assertions.assertTrue(builder.build().getUseGlobalRegistry());
+ }
+
+ @Test
+ void enableRpc() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.enableRpc(false);
+ Assertions.assertFalse(builder.build().getEnableRpc());
+ }
+
+ @Test
+ void rpcLevel() {
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.rpcLevel("SERVICE");
+ Assertions.assertEquals("SERVICE", builder.build().getRpcLevel());
+ }
+
+ @Test
+ void aggregation() {
+ AggregationConfig aggregation = new AggregationConfig();
+ aggregation.setEnabled(true);
+ aggregation.setEnableQps(false);
+ aggregation.setBucketNum(100);
+
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.aggregation(aggregation);
+
+ Assertions.assertSame(aggregation, builder.build().getAggregation());
+ Assertions.assertTrue(builder.build().getAggregation().getEnabled());
+ Assertions.assertFalse(builder.build().getAggregation().getEnableQps());
+ Assertions.assertEquals(100, builder.build().getAggregation().getBucketNum());
+ }
+
+ @Test
+ void histogram() {
+ HistogramConfig histogram = new HistogramConfig();
+ histogram.setEnabled(true);
+ histogram.setMaxExpectedMs(1000);
+ histogram.setBucketsMs(new Integer[] {100, 200, 300, 400, 500});
+ histogram.setPercentiles(new double[] {0.5, 0.9, 0.95, 0.99});
+
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.histogram(histogram);
+
+ Assertions.assertSame(histogram, builder.build().getHistogram());
+ Assertions.assertTrue(builder.build().getHistogram().getEnabled());
+ Assertions.assertEquals(1000, builder.build().getHistogram().getMaxExpectedMs());
+ Assertions.assertArrayEquals(
+ new Integer[] {100, 200, 300, 400, 500},
+ builder.build().getHistogram().getBucketsMs());
+ Assertions.assertArrayEquals(
+ new double[] {0.5, 0.9, 0.95, 0.99},
+ builder.build().getHistogram().getPercentiles());
+ }
+
+ @Test
+ void prometheus() {
+ PrometheusConfig.Exporter exporter = new PrometheusConfig.Exporter();
+ exporter.setEnabled(true);
+ exporter.setEnableHttpServiceDiscovery(true);
+ exporter.setHttpServiceDiscoveryUrl("localhost:8080");
+
+ PrometheusConfig.Pushgateway pushGateway = new PrometheusConfig.Pushgateway();
+ pushGateway.setEnabled(true);
+ pushGateway.setBaseUrl("localhost:9091");
+ pushGateway.setUsername("username");
+ pushGateway.setPassword("password");
+ pushGateway.setJob("job");
+ pushGateway.setPushInterval(30);
+
+ PrometheusConfig prometheus = new PrometheusConfig();
+ prometheus.setExporter(exporter);
+ prometheus.setPushgateway(pushGateway);
+
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.prometheus(prometheus);
+
+ Assertions.assertSame(prometheus, builder.build().getPrometheus());
+ Assertions.assertSame(exporter, builder.build().getPrometheus().getExporter());
+ Assertions.assertSame(pushGateway, builder.build().getPrometheus().getPushgateway());
+ Assertions.assertTrue(builder.build().getPrometheus().getExporter().getEnabled());
+ Assertions.assertTrue(builder.build().getPrometheus().getExporter().getEnableHttpServiceDiscovery());
+ Assertions.assertEquals(
+ "localhost:8080", builder.build().getPrometheus().getExporter().getHttpServiceDiscoveryUrl());
+ Assertions.assertTrue(builder.build().getPrometheus().getPushgateway().getEnabled());
+ Assertions.assertEquals(
+ "localhost:9091",
+ builder.build().getPrometheus().getPushgateway().getBaseUrl());
+ Assertions.assertEquals(
+ "username", builder.build().getPrometheus().getPushgateway().getUsername());
+ Assertions.assertEquals(
+ "password", builder.build().getPrometheus().getPushgateway().getPassword());
+ Assertions.assertEquals(
+ "job", builder.build().getPrometheus().getPushgateway().getJob());
+ Assertions.assertEquals(
+ 30, builder.build().getPrometheus().getPushgateway().getPushInterval());
+ }
+
+ @Test
+ void build() {
+ PrometheusConfig.Exporter exporter = new PrometheusConfig.Exporter();
+ exporter.setEnabled(true);
+ exporter.setEnableHttpServiceDiscovery(true);
+ exporter.setHttpServiceDiscoveryUrl("localhost:8080");
+
+ PrometheusConfig.Pushgateway pushGateway = new PrometheusConfig.Pushgateway();
+ pushGateway.setEnabled(true);
+ pushGateway.setBaseUrl("localhost:9091");
+ pushGateway.setUsername("username");
+ pushGateway.setPassword("password");
+ pushGateway.setJob("job");
+ pushGateway.setPushInterval(30);
+
+ PrometheusConfig prometheus = new PrometheusConfig();
+ prometheus.setExporter(exporter);
+ prometheus.setPushgateway(pushGateway);
+
+ HistogramConfig histogram = new HistogramConfig();
+ histogram.setEnabled(true);
+ histogram.setMaxExpectedMs(1000);
+ histogram.setBucketsMs(new Integer[] {100, 200, 300, 400, 500});
+ histogram.setPercentiles(new double[] {0.5, 0.9, 0.95, 0.99});
+
+ AggregationConfig aggregation = new AggregationConfig();
+ aggregation.setEnabled(true);
+ aggregation.setEnableQps(false);
+ aggregation.setBucketNum(100);
+
+ MetricsBuilder builder = MetricsBuilder.newBuilder();
+ builder.protocol("test")
+ .enableJvm(true)
+ .enableThreadPool(true)
+ .enableRegistry(false)
+ .enableMetadata(false)
+ .exportMetricsService(true)
+ .enableMetricsInit(false)
+ .enableCollectorSync(true)
+ .collectorSyncPeriod(10)
+ .prometheus(prometheus)
+ .histogram(histogram)
+ .aggregation(aggregation)
+ .exportServiceProtocol("tri")
+ .exportServicePort(10010)
+ .useGlobalRegistry(true)
+ .enableRpc(true)
+ .rpcLevel("METHOD");
+
+ MetricsConfig config = builder.build();
+ MetricsConfig config2 = builder.build();
+
+ Assertions.assertEquals("test", config.getProtocol());
+ Assertions.assertTrue(config.getEnableJvm());
+ Assertions.assertTrue(config.getEnableThreadpool());
+ Assertions.assertFalse(config.getEnableRegistry());
+ Assertions.assertFalse(config.getEnableMetadata());
+ Assertions.assertTrue(config.getExportMetricsService());
+ Assertions.assertFalse(config.getEnableMetricsInit());
+ Assertions.assertTrue(config.getEnableCollectorSync());
+ Assertions.assertEquals(10, config.getCollectorSyncPeriod());
+ Assertions.assertSame(prometheus, config.getPrometheus());
+ Assertions.assertSame(exporter, config.getPrometheus().getExporter());
+ Assertions.assertSame(pushGateway, config.getPrometheus().getPushgateway());
+ Assertions.assertTrue(config.getPrometheus().getExporter().getEnabled());
+ Assertions.assertTrue(config.getPrometheus().getExporter().getEnableHttpServiceDiscovery());
+ Assertions.assertEquals(
+ "localhost:8080", config.getPrometheus().getExporter().getHttpServiceDiscoveryUrl());
+ Assertions.assertTrue(config.getPrometheus().getPushgateway().getEnabled());
+ Assertions.assertEquals(
+ "localhost:9091", config.getPrometheus().getPushgateway().getBaseUrl());
+ Assertions.assertEquals(
+ "username", config.getPrometheus().getPushgateway().getUsername());
+ Assertions.assertEquals(
+ "password", config.getPrometheus().getPushgateway().getPassword());
+ Assertions.assertEquals("job", config.getPrometheus().getPushgateway().getJob());
+ Assertions.assertEquals(30, config.getPrometheus().getPushgateway().getPushInterval());
+ Assertions.assertSame(histogram, config.getHistogram());
+ Assertions.assertTrue(config.getHistogram().getEnabled());
+ Assertions.assertEquals(1000, config.getHistogram().getMaxExpectedMs());
+ Assertions.assertArrayEquals(
+ new Integer[] {100, 200, 300, 400, 500}, config.getHistogram().getBucketsMs());
+ Assertions.assertArrayEquals(
+ new double[] {0.5, 0.9, 0.95, 0.99}, config.getHistogram().getPercentiles());
+ Assertions.assertSame(aggregation, config.getAggregation());
+ Assertions.assertTrue(config.getAggregation().getEnabled());
+ Assertions.assertFalse(config.getAggregation().getEnableQps());
+ Assertions.assertEquals(100, config.getAggregation().getBucketNum());
+ Assertions.assertEquals("tri", config.getExportServiceProtocol());
+ Assertions.assertEquals(10010, config.getExportServicePort());
+ Assertions.assertTrue(config.getUseGlobalRegistry());
+ Assertions.assertTrue(config.getEnableRpc());
+ Assertions.assertEquals("METHOD", config.getRpcLevel());
+ Assertions.assertNotSame(config, config2);
+ }
+}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ModuleBuilderTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ModuleBuilderTest.java
index 03f48a06d2..024799de79 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ModuleBuilderTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ModuleBuilderTest.java
@@ -29,28 +29,28 @@ class ModuleBuilderTest {
@Test
void name() {
- ModuleBuilder builder = new ModuleBuilder();
+ ModuleBuilder builder = ModuleBuilder.newBuilder();
builder.name("name");
Assertions.assertEquals("name", builder.build().getName());
}
@Test
void version() {
- ModuleBuilder builder = new ModuleBuilder();
+ ModuleBuilder builder = ModuleBuilder.newBuilder();
builder.version("version");
Assertions.assertEquals("version", builder.build().getVersion());
}
@Test
void owner() {
- ModuleBuilder builder = new ModuleBuilder();
+ ModuleBuilder builder = ModuleBuilder.newBuilder();
builder.owner("owner");
Assertions.assertEquals("owner", builder.build().getOwner());
}
@Test
void organization() {
- ModuleBuilder builder = new ModuleBuilder();
+ ModuleBuilder builder = ModuleBuilder.newBuilder();
builder.organization("organization");
Assertions.assertEquals("organization", builder.build().getOrganization());
}
@@ -58,7 +58,7 @@ class ModuleBuilderTest {
@Test
void addRegistries() {
RegistryConfig registry = new RegistryConfig();
- ModuleBuilder builder = new ModuleBuilder();
+ ModuleBuilder builder = ModuleBuilder.newBuilder();
builder.addRegistries(Collections.singletonList(registry));
Assertions.assertTrue(builder.build().getRegistries().contains(registry));
Assertions.assertEquals(1, builder.build().getRegistries().size());
@@ -67,7 +67,7 @@ class ModuleBuilderTest {
@Test
void addRegistry() {
RegistryConfig registry = new RegistryConfig();
- ModuleBuilder builder = new ModuleBuilder();
+ ModuleBuilder builder = ModuleBuilder.newBuilder();
builder.addRegistry(registry);
Assertions.assertTrue(builder.build().getRegistries().contains(registry));
Assertions.assertEquals(1, builder.build().getRegistries().size());
@@ -76,14 +76,14 @@ class ModuleBuilderTest {
@Test
void monitor() {
MonitorConfig monitor = new MonitorConfig();
- ModuleBuilder builder = new ModuleBuilder();
+ ModuleBuilder builder = ModuleBuilder.newBuilder();
builder.monitor(monitor);
Assertions.assertSame(monitor, builder.build().getMonitor());
}
@Test
void isDefault() {
- ModuleBuilder builder = new ModuleBuilder();
+ ModuleBuilder builder = ModuleBuilder.newBuilder();
builder.isDefault(true);
Assertions.assertTrue(builder.build().isDefault());
}
@@ -93,7 +93,7 @@ class ModuleBuilderTest {
RegistryConfig registry = new RegistryConfig();
MonitorConfig monitor = new MonitorConfig();
- ModuleBuilder builder = new ModuleBuilder();
+ ModuleBuilder builder = ModuleBuilder.newBuilder();
builder.name("name")
.version("version")
.owner("owner")
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MonitorBuilderTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MonitorBuilderTest.java
index aedbb08700..e48b9f3d67 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MonitorBuilderTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/MonitorBuilderTest.java
@@ -28,63 +28,63 @@ class MonitorBuilderTest {
@Test
void protocol() {
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.protocol("protocol");
Assertions.assertEquals("protocol", builder.build().getProtocol());
}
@Test
void address() {
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.address("address");
Assertions.assertEquals("address", builder.build().getAddress());
}
@Test
void username() {
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.username("username");
Assertions.assertEquals("username", builder.build().getUsername());
}
@Test
void password() {
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.password("password");
Assertions.assertEquals("password", builder.build().getPassword());
}
@Test
void group() {
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.group("group");
Assertions.assertEquals("group", builder.build().getGroup());
}
@Test
void version() {
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.version("version");
Assertions.assertEquals("version", builder.build().getVersion());
}
@Test
void interval() {
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.interval("interval");
Assertions.assertEquals("interval", builder.build().getInterval());
}
@Test
void isDefault() {
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.isDefault(true);
Assertions.assertTrue(builder.build().isDefault());
}
@Test
void appendParameter() {
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.appendParameter("default.num", "one").appendParameter("num", "ONE");
Map parameters = builder.build().getParameters();
@@ -99,7 +99,7 @@ class MonitorBuilderTest {
source.put("default.num", "one");
source.put("num", "ONE");
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.appendParameters(source);
Map parameters = builder.build().getParameters();
@@ -110,7 +110,7 @@ class MonitorBuilderTest {
@Test
void build() {
- MonitorBuilder builder = new MonitorBuilder();
+ MonitorBuilder builder = MonitorBuilder.newBuilder();
builder.protocol("protocol")
.address("address")
.group("group")
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ProviderBuilderTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ProviderBuilderTest.java
index 06a8f68b51..6a9d88249b 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ProviderBuilderTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/ProviderBuilderTest.java
@@ -25,168 +25,168 @@ class ProviderBuilderTest {
@Test
void setHost() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.host("host");
Assertions.assertEquals("host", builder.build().getHost());
}
@Test
void port() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.port(8080);
Assertions.assertEquals(8080, builder.build().getPort());
}
@Test
void contextPath() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.contextPath("contextpath");
Assertions.assertEquals("contextpath", builder.build().getContextpath());
}
@Test
void threadPool() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.threadPool("mockthreadpool");
Assertions.assertEquals("mockthreadpool", builder.build().getThreadpool());
}
@Test
void threads() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.threads(20);
Assertions.assertEquals(20, builder.build().getThreads());
}
@Test
void ioThreads() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.ioThreads(25);
Assertions.assertEquals(25, builder.build().getIothreads());
}
@Test
void queues() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.queues(30);
Assertions.assertEquals(30, builder.build().getQueues());
}
@Test
void accepts() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.accepts(35);
Assertions.assertEquals(35, builder.build().getAccepts());
}
@Test
void codec() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.codec("mockcodec");
Assertions.assertEquals("mockcodec", builder.build().getCodec());
}
@Test
void charset() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.charset("utf-8");
Assertions.assertEquals("utf-8", builder.build().getCharset());
}
@Test
void payload() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.payload(40);
Assertions.assertEquals(40, builder.build().getPayload());
}
@Test
void buffer() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.buffer(1024);
Assertions.assertEquals(1024, builder.build().getBuffer());
}
@Test
void transporter() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.transporter("mocktransporter");
Assertions.assertEquals("mocktransporter", builder.build().getTransporter());
}
@Test
void exchanger() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.exchanger("mockexchanger");
Assertions.assertEquals("mockexchanger", builder.build().getExchanger());
}
@Test
void dispatcher() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.dispatcher("mockdispatcher");
Assertions.assertEquals("mockdispatcher", builder.build().getDispatcher());
}
@Test
void networker() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.networker("networker");
Assertions.assertEquals("networker", builder.build().getNetworker());
}
@Test
void server() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.server("server");
Assertions.assertEquals("server", builder.build().getServer());
}
@Test
void client() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.client("client");
Assertions.assertEquals("client", builder.build().getClient());
}
@Test
void telnet() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.telnet("mocktelnethandler");
Assertions.assertEquals("mocktelnethandler", builder.build().getTelnet());
}
@Test
void prompt() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.prompt("prompt");
Assertions.assertEquals("prompt", builder.build().getPrompt());
}
@Test
void status() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.status("mockstatuschecker");
Assertions.assertEquals("mockstatuschecker", builder.build().getStatus());
}
@Test
void Wait() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.wait(Integer.valueOf(1000));
Assertions.assertEquals(1000, builder.build().getWait());
}
@Test
void isDefault() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.isDefault(true);
Assertions.assertTrue(builder.build().isDefault());
}
@Test
void build() {
- ProviderBuilder builder = new ProviderBuilder();
+ ProviderBuilder builder = ProviderBuilder.newBuilder();
builder.host("host")
.port(8080)
.contextPath("contextpath")
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/compatible/DubboInterfaceConsumerBootstrap.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/compatible/DubboInterfaceConsumerBootstrap.java
index 6e559fbea0..1a0e141f44 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/compatible/DubboInterfaceConsumerBootstrap.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/compatible/DubboInterfaceConsumerBootstrap.java
@@ -38,9 +38,6 @@ public class DubboInterfaceConsumerBootstrap {
.application("dubbo-consumer-demo")
// Zookeeper
.registry(interfaceRegistry)
- // Nacos
- // .registry("consul", builder ->
- // builder.address("consul://127.0.0.1:8500?registry.type=service&subscribed.services=dubbo-provider-demo"))
.reference("echo", builder -> builder.interfaceClass(EchoService.class)
.protocol("dubbo"))
.reference("user", builder -> builder.interfaceClass(UserService.class)
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/DubboAnnotationUtils.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/DubboAnnotationUtils.java
index 08a46a67f4..a255c1042f 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/DubboAnnotationUtils.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/DubboAnnotationUtils.java
@@ -138,7 +138,7 @@ public class DubboAnnotationUtils {
* be split in anytime.It will throw IllegalArgumentException If converted array length isn't
* even number.
* The convert cases below work in right way,which are best practice.
- *
+ *
* (array->map)
* ["a","b"] ==> {a=b}
* [" a "," b "] ==> {a=b}
@@ -147,7 +147,7 @@ public class DubboAnnotationUtils {
* ["a=b","c","d"] ==>{a=b,c=d}
* ["a","a:b"] ==>{a="a:b"}
* ["a","a,b"] ==>{a="a,b"}
- *
+ *
*
* @param parameters
* @return
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java
index ba5392a02d..07e2978661 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java
@@ -115,7 +115,6 @@ class EnableDubboConfigTest {
configManager.getProtocol("dubbo").get();
configManager.getProtocol("rest").get();
- configManager.getProtocol("thrift").get();
// asserts aliases
// assertTrue(hasAlias(context, "applicationBean2", "dubbo-demo-application2"));
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml
index d3fa87d9ad..69fec4acf5 100644
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml
@@ -77,6 +77,10 @@
io.nettynetty-transport-native-epoll
+
+ ch.qos.logback
+ logback-core
+
@@ -149,6 +153,13 @@
ch.qos.logbacklogback-classic
+
+
+ ch.qos.logback
+ logback-core
+ 1.4.14
+ compile
+
@@ -178,7 +189,7 @@
org.apache.maven.pluginsmaven-compiler-plugin
- 3.11.0
+ 3.12.11.81.8
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
index ddfd3cc7ca..4ee66de233 100644
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
@@ -77,6 +77,10 @@
io.nettynetty-transport-native-epoll
+
+ ch.qos.logback
+ logback-core
+
@@ -149,6 +153,13 @@
ch.qos.logbacklogback-classic
+
+
+ ch.qos.logback
+ logback-core
+ 1.4.14
+ compile
+
@@ -178,7 +189,7 @@
org.apache.maven.pluginsmaven-compiler-plugin
- 3.11.0
+ 3.12.11.81.8
diff --git a/dubbo-demo/dubbo-demo-triple/pom.xml b/dubbo-demo/dubbo-demo-triple/pom.xml
index 81b92aae67..1a519c084d 100644
--- a/dubbo-demo/dubbo-demo-triple/pom.xml
+++ b/dubbo-demo/dubbo-demo-triple/pom.xml
@@ -30,6 +30,9 @@
true
+ 1.8
+ 1.8
+ 3.12.1
diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml
index 9587c6f6d6..a2c562279e 100644
--- a/dubbo-dependencies-bom/pom.xml
+++ b/dubbo-dependencies-bom/pom.xml
@@ -91,27 +91,19 @@
5.3.25
- 5.8.8
- 3.29.2-GA
- 1.14.10
+ 5.8.9
+ 3.30.2-GA
+ 1.14.113.2.10.Final4.1.104.Final
- 2.2.1
- 2.4.44.5.144.4.161.2.83
- 2.0.43
+ 2.0.443.7.25.1.02.12.03.10.0
- 1.4.5
- 2.2.1
- 1.5.3
- 1.4.3
- 3.6.2
- 0.19.04.0.663.25.11.3.2
@@ -123,35 +115,29 @@
7.0.5.Final3.0.1-b121.1.1
- 4.0.3
- 0.45
- 2.57
- 1.11.32.2.02.23.14.0
- 1.8.00.1.35
- 1.12.0
+ 1.12.11.26.02.16.41.2.13.30.16.01.0.4
- 3.6.0
+ 3.6.12.2.213.14.92.1.13.15.6.Final1.9.13
- 8.5.96
- 0.7.6
+ 8.5.972.2.41.8.61.6.1
- 1.60.0
+ 1.60.10.8.11.2.20.9.10
@@ -159,20 +145,14 @@
1.7.361.3.01.2.17
- 1.2.11
+ 1.2.132.22.0
- 2.11.0
+ 2.15.11.16.00.13.0
-
- 1.10.18
-
-
- 6.9.2
-
1.0.11
@@ -187,15 +167,15 @@
2.2.71.2.01.19.3
- 0.7.63.2.131.6.121.1.10.51.705.4.3
+ 2.0.62.10.1
- 2.16.0
+ 2.16.16.1.262.01.5.0
@@ -288,16 +268,6 @@
netty${netty_version}
-
- org.apache.mina
- mina-core
- ${mina_version}
-
-
- org.glassfish.grizzly
- grizzly-core
- ${grizzly_version}
- org.apache.httpcomponentshttpclient
@@ -380,33 +350,6 @@
jedis${jedis_version}
-
- com.ecwid.consul
- consul-api
- ${consul_version}
-
-
- com.pszymczyk.consul
- embedded-consul
- ${consul_process_version}
- test
-
-
- com.orbitz.consul
- consul-client
- ${consul_client_version}
-
-
-
- com.netflix.eureka
- eureka-client
- ${eureka.version}
-
-
- com.netflix.eureka
- eureka-core
- ${eureka.version}
-
@@ -415,26 +358,6 @@
${alibaba_spring_context_support_version}
-
- com.googlecode.xmemcached
- xmemcached
- ${xmemcached_version}
-
-
- org.apache.cxf
- cxf-rt-frontend-simple
- ${cxf_version}
-
-
- org.apache.cxf
- cxf-rt-transports-http
- ${cxf_version}
-
-
- org.apache.thrift
- libthrift
- ${thrift_version}
- com.cauchohessian
@@ -541,36 +464,6 @@
cache-api${jcache_version}
-
- com.esotericsoftware
- kryo
- ${kryo_version}
-
-
- de.javakaffee
- kryo-serializers
- ${kryo_serializers_version}
-
-
- de.ruedigermoeller
- fst
- ${fst_version}
-
-
- org.apache.avro
- avro
- ${avro_version}
-
-
- io.protostuff
- protostuff-core
- ${protostuff_version}
-
-
- io.protostuff
- protostuff-runtime
- ${protostuff_version}
- javax.ws.rsjavax.ws.rs-api
@@ -637,21 +530,6 @@
tomcat-embed-core${tomcat_embed_version}
-
- io.etcd
- jetcd-core
- ${jetcd_version}
-
-
- io.netty
- netty-codec-http2
-
-
- io.netty
- netty-handler-proxy
-
-
- org.slf4j
@@ -891,18 +769,6 @@
portlet-api${portlet_version}
-
-
- io.etcd
- jetcd-launcher
- ${etcd_launcher_version}
-
-
- com.github.spotbugs
- spotbugs-annotations
-
-
- org.testcontainerstestcontainers
diff --git a/dubbo-distribution/dubbo-all/pom.xml b/dubbo-distribution/dubbo-all/pom.xml
index 9740f5744c..17e1ae2cb5 100644
--- a/dubbo-distribution/dubbo-all/pom.xml
+++ b/dubbo-distribution/dubbo-all/pom.xml
@@ -971,6 +971,10 @@
META-INF/dubbo/internal/org.apache.dubbo.config.CommonConfigPostProcessor
+
+
+ META-INF/dubbo/internal/org.apache.dubbo.registry.integration.ServiceURLCustomizer
+
diff --git a/dubbo-maven-plugin/pom.xml b/dubbo-maven-plugin/pom.xml
index bdb1e4a64a..fced11ecca 100644
--- a/dubbo-maven-plugin/pom.xml
+++ b/dubbo-maven-plugin/pom.xml
@@ -36,7 +36,7 @@
org.apache.mavenmaven-plugin-api
- 3.9.1
+ 3.9.6
@@ -68,7 +68,7 @@
commons-iocommons-io
- 2.11.0
+ 2.15.1
diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java
index 0a3001f2ec..729afdacde 100644
--- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java
+++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java
@@ -160,7 +160,9 @@ public class RtStatComposite extends AbstractMetricsExport {
public void calcMethodKeyRt(Invocation invocation, String registryOpType, Long responseTime) {
List actions;
- if (invocation.getServiceModel() != null && invocation.getServiceModel().getServiceMetadata() != null) {
+ if (getServiceLevel()
+ && invocation.getServiceModel() != null
+ && invocation.getServiceModel().getServiceMetadata() != null) {
Map attributeMap =
invocation.getServiceModel().getServiceMetadata().getAttributeMap();
Map> cache = (Map>) attributeMap.get("MethodKeyRt");
diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/sample/GaugeMetricSample.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/sample/GaugeMetricSample.java
index bc17fd511a..d998e0be37 100644
--- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/sample/GaugeMetricSample.java
+++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/sample/GaugeMetricSample.java
@@ -16,18 +16,25 @@
*/
package org.apache.dubbo.metrics.model.sample;
+import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
+import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.metrics.model.MetricsCategory;
import org.apache.dubbo.metrics.model.key.MetricsKey;
import org.apache.dubbo.metrics.model.key.MetricsKeyWrapper;
import java.util.Map;
import java.util.Objects;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.ToDoubleFunction;
+import static org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_METRICS_COLLECTOR_EXCEPTION;
+
/**
* GaugeMetricSample.
*/
public class GaugeMetricSample extends MetricSample {
+ private static final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(GaugeMetricSample.class);
+ private final AtomicBoolean warned = new AtomicBoolean(false);
private final T value;
@@ -71,7 +78,22 @@ public class GaugeMetricSample extends MetricSample {
ToDoubleFunction apply) {
super(name, description, tags, Type.GAUGE, category, baseUnit);
this.value = Objects.requireNonNull(value, "The GaugeMetricSample value cannot be null");
- this.apply = Objects.requireNonNull(apply, "The GaugeMetricSample apply cannot be null");
+ Objects.requireNonNull(apply, "The GaugeMetricSample apply cannot be null");
+ this.apply = (e) -> {
+ try {
+ return apply.applyAsDouble(e);
+ } catch (Throwable t) {
+ if (warned.compareAndSet(false, true)) {
+ logger.error(
+ COMMON_METRICS_COLLECTOR_EXCEPTION,
+ "",
+ "",
+ "Unexpected error occurred when applying the GaugeMetricSample",
+ t);
+ }
+ return 0;
+ }
+ };
}
public T getValue() {
diff --git a/dubbo-plugin/dubbo-compiler/src/main/resources/Dubbo3TripleStub.mustache b/dubbo-plugin/dubbo-compiler/src/main/resources/Dubbo3TripleStub.mustache
index 4ecef4c333..c75eab4cf3 100644
--- a/dubbo-plugin/dubbo-compiler/src/main/resources/Dubbo3TripleStub.mustache
+++ b/dubbo-plugin/dubbo-compiler/src/main/resources/Dubbo3TripleStub.mustache
@@ -69,20 +69,19 @@ public final class {{className}} {
{{{javaDoc}}}
{{/javaDoc}}
private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}",
- {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.UNARY,
+ {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.UNARY,
obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom,
{{outputType}}::parseFrom);
private static final StubMethodDescriptor {{methodName}}AsyncMethod = new StubMethodDescriptor("{{originMethodName}}",
- {{inputType}}.class, java.util.concurrent.CompletableFuture.class, serviceDescriptor, MethodDescriptor.RpcType.UNARY,
+ {{inputType}}.class, java.util.concurrent.CompletableFuture.class, MethodDescriptor.RpcType.UNARY,
obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom,
{{outputType}}::parseFrom);
private static final StubMethodDescriptor {{methodName}}ProxyAsyncMethod = new StubMethodDescriptor("{{originMethodName}}Async",
- {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.UNARY,
+ {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.UNARY,
obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom,
{{outputType}}::parseFrom);
-
{{/unaryMethods}}
{{#serverStreamingMethods}}
@@ -90,10 +89,9 @@ public final class {{className}} {
{{{javaDoc}}}
{{/javaDoc}}
private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}",
- {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.SERVER_STREAM,
+ {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.SERVER_STREAM,
obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom,
{{outputType}}::parseFrom);
-
{{/serverStreamingMethods}}
{{#clientStreamingMethods}}
@@ -101,7 +99,7 @@ public final class {{className}} {
{{{javaDoc}}}
{{/javaDoc}}
private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}",
- {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.CLIENT_STREAM,
+ {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.CLIENT_STREAM,
obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom,
{{outputType}}::parseFrom);
{{/clientStreamingMethods}}
@@ -111,11 +109,27 @@ public final class {{className}} {
{{{javaDoc}}}
{{/javaDoc}}
private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}",
- {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.BI_STREAM,
+ {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.BI_STREAM,
obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom,
{{outputType}}::parseFrom);
{{/biStreamingWithoutClientStreamMethods}}
+ static{
+ {{#unaryMethods}}
+ serviceDescriptor.addMethod({{methodName}}Method);
+ serviceDescriptor.addMethod({{methodName}}ProxyAsyncMethod);
+ {{/unaryMethods}}
+ {{#serverStreamingMethods}}
+ serviceDescriptor.addMethod({{methodName}}Method);
+ {{/serverStreamingMethods}}
+ {{#clientStreamingMethods}}
+ serviceDescriptor.addMethod({{methodName}}Method);
+ {{/clientStreamingMethods}}
+ {{#biStreamingWithoutClientStreamMethods}}
+ serviceDescriptor.addMethod({{methodName}}Method);
+ {{/biStreamingWithoutClientStreamMethods}}
+ }
+
public static class {{interfaceClassName}}Stub implements {{interfaceClassName}}{
private final Invoker<{{interfaceClassName}}> invoker;
diff --git a/dubbo-plugin/dubbo-compiler/src/main/resources/ReactorDubbo3TripleStub.mustache b/dubbo-plugin/dubbo-compiler/src/main/resources/ReactorDubbo3TripleStub.mustache
index afc799b072..28c7626da8 100644
--- a/dubbo-plugin/dubbo-compiler/src/main/resources/ReactorDubbo3TripleStub.mustache
+++ b/dubbo-plugin/dubbo-compiler/src/main/resources/ReactorDubbo3TripleStub.mustache
@@ -70,7 +70,7 @@ public final class {{className}} {
{{{javaDoc}}}
{{/javaDoc}}
private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}",
- {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.UNARY,
+ {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.UNARY,
obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom,
{{outputType}}::parseFrom);
{{/unaryMethods}}
@@ -80,7 +80,7 @@ public final class {{className}} {
{{{javaDoc}}}
{{/javaDoc}}
private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}",
- {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.SERVER_STREAM,
+ {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.SERVER_STREAM,
obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom,
{{outputType}}::parseFrom);
{{/serverStreamingMethods}}
@@ -90,7 +90,7 @@ public final class {{className}} {
{{{javaDoc}}}
{{/javaDoc}}
private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}",
- {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.CLIENT_STREAM,
+ {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.CLIENT_STREAM,
obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom,
{{outputType}}::parseFrom);
{{/clientStreamingMethods}}
@@ -100,11 +100,26 @@ public final class {{className}} {
{{{javaDoc}}}
{{/javaDoc}}
private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}",
- {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.BI_STREAM,
+ {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.BI_STREAM,
obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom,
{{outputType}}::parseFrom);
{{/biStreamingWithoutClientStreamMethods}}
+ static{
+ {{#unaryMethods}}
+ serviceDescriptor.addMethod({{methodName}}Method);
+ {{/unaryMethods}}
+ {{#serverStreamingMethods}}
+ serviceDescriptor.addMethod({{methodName}}Method);
+ {{/serverStreamingMethods}}
+ {{#clientStreamingMethods}}
+ serviceDescriptor.addMethod({{methodName}}Method);
+ {{/clientStreamingMethods}}
+ {{#biStreamingWithoutClientStreamMethods}}
+ serviceDescriptor.addMethod({{methodName}}Method);
+ {{/biStreamingWithoutClientStreamMethods}}
+ }
+
public static class {{interfaceClassName}}Stub implements {{interfaceClassName}}{
private final Invoker<{{interfaceClassName}}> invoker;
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DefaultServiceURLCustomizer.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DefaultServiceURLCustomizer.java
new file mode 100644
index 0000000000..2473df54b7
--- /dev/null
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DefaultServiceURLCustomizer.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.registry.integration;
+
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.CollectionUtils;
+import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.stream.Stream;
+
+import static org.apache.dubbo.common.constants.CommonConstants.ALIVE_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.BACKGROUND_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
+import static org.apache.dubbo.common.constants.CommonConstants.CORE_THREADS_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.EXECUTOR_MANAGEMENT_MODE;
+import static org.apache.dubbo.common.constants.CommonConstants.EXTRA_KEYS_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.HIDE_KEY_PREFIX;
+import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.METHODS_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.MONITOR_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.PID_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.QUEUES_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_LOCAL_FILE_CACHE_ENABLED;
+import static org.apache.dubbo.common.constants.CommonConstants.THREADPOOL_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.THREADS_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.THREAD_NAME_KEY;
+import static org.apache.dubbo.common.constants.FilterConstants.VALIDATION_KEY;
+import static org.apache.dubbo.common.constants.QosConstants.ACCEPT_FOREIGN_IP;
+import static org.apache.dubbo.common.constants.QosConstants.QOS_ENABLE;
+import static org.apache.dubbo.common.constants.QosConstants.QOS_HOST;
+import static org.apache.dubbo.common.constants.QosConstants.QOS_PORT;
+import static org.apache.dubbo.common.constants.RegistryConstants.REGISTER_MODE_KEY;
+import static org.apache.dubbo.registry.Constants.SIMPLIFIED_KEY;
+import static org.apache.dubbo.registry.integration.RegistryProtocol.DEFAULT_REGISTER_PROVIDER_KEYS;
+import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY;
+import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY;
+import static org.apache.dubbo.rpc.Constants.INTERFACES;
+
+public class DefaultServiceURLCustomizer implements ServiceURLCustomizer {
+
+ private static final String[] excludedParameters = new String[] {
+ MONITOR_KEY,
+ BIND_IP_KEY,
+ BIND_PORT_KEY,
+ QOS_ENABLE,
+ QOS_HOST,
+ QOS_PORT,
+ ACCEPT_FOREIGN_IP,
+ VALIDATION_KEY,
+ INTERFACES,
+ REGISTER_MODE_KEY,
+ PID_KEY,
+ REGISTRY_LOCAL_FILE_CACHE_ENABLED,
+ EXECUTOR_MANAGEMENT_MODE,
+ BACKGROUND_KEY,
+ ANYHOST_KEY,
+ THREAD_NAME_KEY,
+ THREADPOOL_KEY,
+ ALIVE_KEY,
+ QUEUES_KEY,
+ CORE_THREADS_KEY,
+ THREADS_KEY
+ };
+
+ @Override
+ public URL customize(URL serviceURL, ApplicationModel applicationModel) {
+ boolean simplified = (boolean) serviceURL.getAttribute(SIMPLIFIED_KEY, false);
+ if (simplified) {
+ String extraKeys = (String) serviceURL.getAttribute(EXTRA_KEYS_KEY, "");
+ // if path is not the same as interface name then we should keep INTERFACE_KEY,
+ // otherwise, the registry structure of zookeeper would be '/dubbo/path/providers',
+ // but what we expect is '/dubbo/interface/providers'
+ if (!serviceURL.getPath().equals(serviceURL.getParameter(INTERFACE_KEY))) {
+ if (StringUtils.isNotEmpty(extraKeys)) {
+ extraKeys += ",";
+ }
+ extraKeys += INTERFACE_KEY;
+ }
+ String[] paramsToRegistry = Stream.concat(
+ Arrays.stream(DEFAULT_REGISTER_PROVIDER_KEYS),
+ Arrays.stream(COMMA_SPLIT_PATTERN.split(extraKeys)))
+ .toArray(String[]::new);
+ return URL.valueOf(serviceURL, paramsToRegistry, serviceURL.getParameter(METHODS_KEY, (String[]) null));
+ }
+ return serviceURL.removeParameters(getFilteredKeys(serviceURL)).removeParameters(excludedParameters);
+ }
+
+ @Override
+ public int getPriority() {
+ return MAX_PRIORITY;
+ }
+
+ private String[] getFilteredKeys(URL url) {
+ Map params = url.getParameters();
+ if (CollectionUtils.isNotEmptyMap(params)) {
+ return params.keySet().stream()
+ .filter(k -> k.startsWith(HIDE_KEY_PREFIX))
+ .toArray(String[]::new);
+ }
+ return new String[0];
+ }
+}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index 5a5fc151b9..e8a6a68064 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
import org.apache.dubbo.common.constants.RegistryConstants;
import org.apache.dubbo.common.deploy.ApplicationDeployer;
+import org.apache.dubbo.common.extension.ExtensionLoader;
import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.threadpool.manager.FrameworkExecutorRepository;
@@ -76,47 +77,33 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
-import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.BACKGROUND_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;
import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.ENABLED_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.EXECUTOR_MANAGEMENT_MODE;
import static org.apache.dubbo.common.constants.CommonConstants.EXTRA_KEYS_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.HIDE_KEY_PREFIX;
import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.IPV6_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.LOADBALANCE_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.MERGEABLE_CLUSTER_NAME;
-import static org.apache.dubbo.common.constants.CommonConstants.METHODS_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.MONITOR_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.PACKABLE_METHOD_FACTORY_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.PID_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_LOCAL_FILE_CACHE_ENABLED;
import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_PROTOCOL_LISTENER_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.RELEASE_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
-import static org.apache.dubbo.common.constants.FilterConstants.VALIDATION_KEY;
import static org.apache.dubbo.common.constants.LoggerCodeConstants.INTERNAL_ERROR;
import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_UNSUPPORTED_CATEGORY;
-import static org.apache.dubbo.common.constants.QosConstants.ACCEPT_FOREIGN_IP;
-import static org.apache.dubbo.common.constants.QosConstants.QOS_ENABLE;
-import static org.apache.dubbo.common.constants.QosConstants.QOS_HOST;
-import static org.apache.dubbo.common.constants.QosConstants.QOS_PORT;
import static org.apache.dubbo.common.constants.RegistryConstants.ALL_CATEGORIES;
import static org.apache.dubbo.common.constants.RegistryConstants.CATEGORY_KEY;
import static org.apache.dubbo.common.constants.RegistryConstants.CONFIGURATORS_CATEGORY;
import static org.apache.dubbo.common.constants.RegistryConstants.DYNAMIC_KEY;
import static org.apache.dubbo.common.constants.RegistryConstants.OVERRIDE_PROTOCOL;
-import static org.apache.dubbo.common.constants.RegistryConstants.REGISTER_MODE_KEY;
import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_KEY;
import static org.apache.dubbo.common.constants.RegistryConstants.SERVICE_REGISTRY_PROTOCOL;
import static org.apache.dubbo.common.utils.StringUtils.isEmpty;
@@ -130,8 +117,6 @@ import static org.apache.dubbo.registry.Constants.REGISTER_IP_KEY;
import static org.apache.dubbo.registry.Constants.REGISTER_KEY;
import static org.apache.dubbo.registry.Constants.REGISTRY_RETRY_PERIOD_KEY;
import static org.apache.dubbo.registry.Constants.SIMPLIFIED_KEY;
-import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY;
-import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY;
import static org.apache.dubbo.remoting.Constants.CHECK_KEY;
import static org.apache.dubbo.remoting.Constants.CODEC_KEY;
import static org.apache.dubbo.remoting.Constants.CONNECTIONS_KEY;
@@ -140,7 +125,6 @@ import static org.apache.dubbo.remoting.Constants.PREFER_SERIALIZATION_KEY;
import static org.apache.dubbo.remoting.Constants.SERIALIZATION_KEY;
import static org.apache.dubbo.rpc.Constants.DEPRECATED_KEY;
import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;
-import static org.apache.dubbo.rpc.Constants.INTERFACES;
import static org.apache.dubbo.rpc.Constants.MOCK_KEY;
import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;
import static org.apache.dubbo.rpc.cluster.Constants.CONSUMER_URL_KEY;
@@ -184,18 +168,6 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
private FrameworkModel frameworkModel;
private ExporterFactory exporterFactory;
- // Filter the parameters that do not need to be output in url(Starting with .)
- private static String[] getFilteredKeys(URL url) {
- Map params = url.getParameters();
- if (CollectionUtils.isNotEmptyMap(params)) {
- return params.keySet().stream()
- .filter(k -> k.startsWith(HIDE_KEY_PREFIX))
- .toArray(String[]::new);
- } else {
- return new String[0];
- }
- }
-
public RegistryProtocol() {}
@Override
@@ -292,7 +264,7 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
// url to registry
final Registry registry = getRegistry(registryUrl);
- final URL registeredProviderUrl = getUrlToRegistry(providerUrl, registryUrl);
+ final URL registeredProviderUrl = customizeURL(providerUrl, registryUrl);
// decide if we need to delay publish (provider itself and registry should both need to register)
boolean register = providerUrl.getParameter(REGISTER_KEY, true) && registryUrl.getParameter(REGISTER_KEY, true);
@@ -354,10 +326,10 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
ReferenceCountExporter> exporter =
exporterFactory.createExporter(providerUrlKey, () -> protocol.export(invokerDelegate));
- return (ExporterChangeableWrapper) bounds.computeIfAbsent(providerUrlKey, _k -> new ConcurrentHashMap<>())
- .computeIfAbsent(registryUrlKey, s -> {
- return new ExporterChangeableWrapper<>((ReferenceCountExporter) exporter, originInvoker);
- });
+ return (ExporterChangeableWrapper) bounds.computeIfAbsent(providerUrlKey, k -> new ConcurrentHashMap<>())
+ .computeIfAbsent(
+ registryUrlKey,
+ s -> new ExporterChangeableWrapper<>((ReferenceCountExporter) exporter, originInvoker));
}
public void reExport(Exporter exporter, URL newInvokerUrl) {
@@ -402,10 +374,10 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
URL registeredUrl = exporter.getRegisterUrl();
URL registryUrl = getRegistryUrl(originInvoker);
- URL newProviderUrl = getUrlToRegistry(newInvokerUrl, registryUrl);
+ URL newProviderUrl = customizeURL(newInvokerUrl, registryUrl);
// update local exporter
- Invoker invokerDelegate = new InvokerDelegate(originInvoker, newInvokerUrl);
+ Invoker invokerDelegate = new InvokerDelegate<>(originInvoker, newInvokerUrl);
exporter.setExporter(protocol.export(invokerDelegate));
// update registry
@@ -501,45 +473,19 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
/**
* Return the url that is registered to the registry and filter the url parameter once
*
- * @param providerUrl
+ * @param providerUrl provider service url
+ * @param registryUrl registry center url
* @return url to registry.
*/
- private URL getUrlToRegistry(final URL providerUrl, final URL registryUrl) {
- // The address you see at the registry
- if (!registryUrl.getParameter(SIMPLIFIED_KEY, false)) {
- return providerUrl
- .removeParameters(getFilteredKeys(providerUrl))
- .removeParameters(
- MONITOR_KEY,
- BIND_IP_KEY,
- BIND_PORT_KEY,
- QOS_ENABLE,
- QOS_HOST,
- QOS_PORT,
- ACCEPT_FOREIGN_IP,
- VALIDATION_KEY,
- INTERFACES,
- REGISTER_MODE_KEY,
- PID_KEY,
- REGISTRY_LOCAL_FILE_CACHE_ENABLED,
- EXECUTOR_MANAGEMENT_MODE,
- BACKGROUND_KEY,
- ANYHOST_KEY);
- } else {
- String extraKeys = registryUrl.getParameter(EXTRA_KEYS_KEY, "");
- // if path is not the same as interface name then we should keep INTERFACE_KEY,
- // otherwise, the registry structure of zookeeper would be '/dubbo/path/providers',
- // but what we expect is '/dubbo/interface/providers'
- if (!providerUrl.getPath().equals(providerUrl.getParameter(INTERFACE_KEY))) {
- if (StringUtils.isNotEmpty(extraKeys)) {
- extraKeys += ",";
- }
- extraKeys += INTERFACE_KEY;
- }
- String[] paramsToRegistry =
- getParamsToRegistry(DEFAULT_REGISTER_PROVIDER_KEYS, COMMA_SPLIT_PATTERN.split(extraKeys));
- return URL.valueOf(providerUrl, paramsToRegistry, providerUrl.getParameter(METHODS_KEY, (String[]) null));
+ private URL customizeURL(final URL providerUrl, final URL registryUrl) {
+ URL newProviderURL = providerUrl.putAttribute(SIMPLIFIED_KEY, registryUrl.getParameter(SIMPLIFIED_KEY, false));
+ newProviderURL = newProviderURL.putAttribute(EXTRA_KEYS_KEY, registryUrl.getParameter(EXTRA_KEYS_KEY, ""));
+ ApplicationModel applicationModel = providerUrl.getOrDefaultApplicationModel();
+ ExtensionLoader loader = applicationModel.getExtensionLoader(ServiceURLCustomizer.class);
+ for (ServiceURLCustomizer customizer : loader.getSupportedExtensionInstances()) {
+ newProviderURL = customizer.customize(newProviderURL, applicationModel);
}
+ return newProviderURL;
}
private URL getSubscribedOverrideUrl(URL registeredProviderUrl) {
@@ -571,14 +517,12 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
*/
private String getProviderUrlKey(final Invoker> originInvoker) {
URL providerUrl = getProviderUrl(originInvoker);
- String key = providerUrl.removeParameters(DYNAMIC_KEY, ENABLED_KEY).toFullString();
- return key;
+ return providerUrl.removeParameters(DYNAMIC_KEY, ENABLED_KEY).toFullString();
}
private String getRegistryUrlKey(final Invoker> originInvoker) {
URL registryUrl = getRegistryUrl(originInvoker);
- String key = registryUrl.removeParameters(DYNAMIC_KEY, ENABLED_KEY).toFullString();
- return key;
+ return registryUrl.removeParameters(DYNAMIC_KEY, ENABLED_KEY).toFullString();
}
@Override
@@ -634,7 +578,7 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
Class type,
URL url,
URL consumerUrl) {
- return new ServiceDiscoveryMigrationInvoker(registryProtocol, cluster, registry, type, url, consumerUrl);
+ return new ServiceDiscoveryMigrationInvoker<>(registryProtocol, cluster, registry, type, url, consumerUrl);
}
/**
@@ -722,15 +666,6 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
.getActivateExtension(url, REGISTRY_PROTOCOL_LISTENER_KEY);
}
- // available to test
- public String[] getParamsToRegistry(String[] defaultKeys, String[] additionalParameterKeys) {
- int additionalLen = additionalParameterKeys.length;
- String[] registryParams = new String[defaultKeys.length + additionalLen];
- System.arraycopy(defaultKeys, 0, registryParams, 0, defaultKeys.length);
- System.arraycopy(additionalParameterKeys, 0, registryParams, defaultKeys.length, additionalLen);
- return registryParams;
- }
-
@Override
public void destroy() {
// FIXME all application models in framework are removed at this moment
@@ -758,7 +693,10 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
// already removed
continue;
}
- if (moduleModel.getServiceRepository().getExportedServices().size() > 0) {
+ if (!moduleModel
+ .getServiceRepository()
+ .getExportedServices()
+ .isEmpty()) {
moduleModel
.getExtensionLoader(GovernanceRuleRepository.class)
.getDefaultExtension()
@@ -1164,11 +1102,10 @@ public class RegistryProtocol implements Protocol, ScopeModelAware {
.getConfiguration()
.convert(Boolean.class, ENABLE_CONFIGURATION_LISTEN, true)) {
for (ModuleModel moduleModel : applicationModel.getPubModuleModels()) {
- if (moduleModel
- .getServiceRepository()
- .getExportedServices()
- .size()
- > 0) {
+ if (!moduleModel
+ .getServiceRepository()
+ .getExportedServices()
+ .isEmpty()) {
moduleModel
.getExtensionLoader(GovernanceRuleRepository.class)
.getDefaultExtension()
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ServiceURLCustomizer.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ServiceURLCustomizer.java
new file mode 100644
index 0000000000..8229ba5875
--- /dev/null
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ServiceURLCustomizer.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.registry.integration;
+
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.extension.SPI;
+import org.apache.dubbo.common.lang.Prioritized;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+
+import static org.apache.dubbo.common.extension.ExtensionScope.APPLICATION;
+
+/**
+ * Customize parameters for interface-level registration
+ */
+@SPI(scope = APPLICATION)
+public interface ServiceURLCustomizer extends Prioritized {
+
+ /**
+ * Customizes {@link URL the service url}
+ *
+ * @param serviceURL {@link URL the service url}
+ * @return new service url
+ */
+ URL customize(URL serviceURL, ApplicationModel applicationModel);
+}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.integration.ServiceURLCustomizer b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.integration.ServiceURLCustomizer
new file mode 100644
index 0000000000..83a3432c9b
--- /dev/null
+++ b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.integration.ServiceURLCustomizer
@@ -0,0 +1 @@
+default=org.apache.dubbo.registry.integration.DefaultServiceURLCustomizer
diff --git a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyConnectionClient.java b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyConnectionClient.java
index 66e8c08416..3e2fd50657 100644
--- a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyConnectionClient.java
+++ b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyConnectionClient.java
@@ -150,7 +150,9 @@ public class NettyConnectionClient extends AbstractConnectionClient {
current.close();
}
this.channel.set(null);
- closePromise.setSuccess(null);
+ if (!closePromise.isDone()) {
+ closePromise.setSuccess(null);
+ }
}
}
diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyRequestContainerFilterAdapter.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyRequestContainerFilterAdapter.java
index 6cb0aa07d9..eba29dde82 100644
--- a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyRequestContainerFilterAdapter.java
+++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyRequestContainerFilterAdapter.java
@@ -76,6 +76,8 @@ public class ResteasyRequestContainerFilterAdapter implements RestRequestFilter,
restFilterContext.setComplete(true);
} catch (Throwable e) {
throw new RuntimeException("dubbo rest resteasy ContainerRequestFilter write response encode error", e);
+ } finally {
+ containerRequestContext.getHttpRequest().releaseContentBuffer();
}
}
}
diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/intercept/ResteasyStatusCodeInterceptor.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/intercept/ResteasyStatusCodeInterceptor.java
new file mode 100644
index 0000000000..ee988194c9
--- /dev/null
+++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/intercept/ResteasyStatusCodeInterceptor.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.rpc.protocol.rest.extension.resteasy.intercept;
+
+import org.apache.dubbo.common.extension.Activate;
+import org.apache.dubbo.rpc.protocol.rest.extension.resteasy.ResteasyContext;
+import org.apache.dubbo.rpc.protocol.rest.filter.RestResponseInterceptor;
+import org.apache.dubbo.rpc.protocol.rest.filter.context.RestInterceptContext;
+
+import org.jboss.resteasy.specimpl.AbstractBuiltResponse;
+
+@Activate(
+ value = "resteasy-resStatus",
+ onClass = {
+ "javax.ws.rs.ext.WriterInterceptorContext",
+ "org.jboss.resteasy.specimpl.BuiltResponse",
+ "org.jboss.resteasy.plugins.server.netty.NettyHttpRequest",
+ "org.jboss.resteasy.plugins.server.netty.NettyHttpResponse"
+ },
+ order = Integer.MAX_VALUE)
+public class ResteasyStatusCodeInterceptor implements RestResponseInterceptor, ResteasyContext {
+
+ @Override
+ public void intercept(RestInterceptContext restResponseInterceptor) throws Exception {
+ Object result = restResponseInterceptor.getResult();
+
+ if (result == null || (!(result instanceof AbstractBuiltResponse))) {
+ return;
+ }
+
+ AbstractBuiltResponse abstractBuiltResponse = (AbstractBuiltResponse) result;
+
+ restResponseInterceptor.getResponse().setStatus(abstractBuiltResponse.getStatus());
+ }
+}
diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/netty/ssl/SslServerTlsHandler.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/netty/ssl/SslServerTlsHandler.java
index e0dde1aa00..93a87baf78 100644
--- a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/netty/ssl/SslServerTlsHandler.java
+++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/netty/ssl/SslServerTlsHandler.java
@@ -105,8 +105,7 @@ public class SslServerTlsHandler extends ByteToMessageDecoder {
url, channelHandlerContext.channel().remoteAddress());
if (providerConnectionConfig == null) {
- ChannelPipeline p = channelHandlerContext.pipeline();
- p.remove(this);
+ channelHandlerContext.pipeline().remove(this);
return;
}
@@ -117,8 +116,8 @@ public class SslServerTlsHandler extends ByteToMessageDecoder {
}
if (providerConnectionConfig.getAuthPolicy() == AuthPolicy.NONE) {
- ChannelPipeline p = channelHandlerContext.pipeline();
- p.remove(this);
+ channelHandlerContext.pipeline().remove(this);
+ return;
}
logger.error(INTERNAL_ERROR, "", "", "TLS negotiation failed when trying to accept new connection.");
diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.rest.filter.RestResponseInterceptor b/dubbo-rpc/dubbo-rpc-rest/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.rest.filter.RestResponseInterceptor
index 4637962aef..b72ba51011 100644
--- a/dubbo-rpc/dubbo-rpc-rest/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.rest.filter.RestResponseInterceptor
+++ b/dubbo-rpc/dubbo-rpc-rest/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.rest.filter.RestResponseInterceptor
@@ -1,2 +1,3 @@
resteasy=org.apache.dubbo.rpc.protocol.rest.extension.resteasy.intercept.ResteasyWriterInterceptorAdapter
invoke=org.apache.dubbo.rpc.protocol.rest.filter.ServiceInvokeRestResponseInterceptor
+resteasy-resStatus=org.apache.dubbo.rpc.protocol.rest.extension.resteasy.intercept.ResteasyStatusCodeInterceptor
diff --git a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/ResteasyResponseTest.java b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/ResteasyResponseTest.java
index 7c9d7caece..bebde64399 100644
--- a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/ResteasyResponseTest.java
+++ b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/ResteasyResponseTest.java
@@ -68,6 +68,22 @@ public class ResteasyResponseTest {
Assertions.assertNotNull(response);
}
+ @Test
+ void testResponseCustomStatusCode() {
+ RestDemoService server = new RestDemoServiceImpl();
+ URL url = this.registerProvider(exportUrl, server, RestDemoService.class);
+
+ URL nettyUrl = url.addParameter(SERVER_KEY, "netty").addParameter("timeout", 3000000);
+
+ protocol.export(proxy.getInvoker(new RestDemoServiceImpl(), RestDemoService.class, nettyUrl));
+
+ RestDemoService demoService = this.proxy.getProxy(protocol.refer(RestDemoService.class, nettyUrl));
+
+ Response response = demoService.deleteUserById("uid");
+
+ Assertions.assertEquals(response.getStatus(), 200);
+ }
+
private URL registerProvider(URL url, Object impl, Class> interfaceClass) {
ServiceDescriptor serviceDescriptor = repository.registerService(interfaceClass);
ProviderModel providerModel = new ProviderModel(url.getServiceKey(), impl, serviceDescriptor, null, null);
diff --git a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/rest/RestDemoService.java b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/rest/RestDemoService.java
index de00e90184..728ce07884 100644
--- a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/rest/RestDemoService.java
+++ b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/rest/RestDemoService.java
@@ -16,7 +16,15 @@
*/
package org.apache.dubbo.rpc.protocol.rest.rest;
-import javax.ws.rs.*;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@@ -50,4 +58,8 @@ public interface RestDemoService {
@DELETE
@Path("{uid}")
String deleteUserByUid(@PathParam("uid") String uid);
+
+ @DELETE
+ @Path("/deleteUserById/{uid}")
+ public Response deleteUserById(@PathParam("uid") String uid);
}
diff --git a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/rest/RestDemoServiceImpl.java b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/rest/RestDemoServiceImpl.java
index a71f4b2095..63a4734e85 100644
--- a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/rest/RestDemoServiceImpl.java
+++ b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/rest/RestDemoServiceImpl.java
@@ -69,6 +69,11 @@ public class RestDemoServiceImpl implements RestDemoService {
throw new RuntimeException();
}
+ @Override
+ public Response deleteUserById(String uid) {
+ return Response.status(300).entity("deleted").build();
+ }
+
public static Map getAttachments() {
return context;
}
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/ReflectionPackableMethod.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/ReflectionPackableMethod.java
index 22d3ff956f..6ec87135a1 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/ReflectionPackableMethod.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/ReflectionPackableMethod.java
@@ -41,7 +41,7 @@ import java.util.stream.Stream;
import com.google.protobuf.Message;
import static org.apache.dubbo.common.constants.CommonConstants.$ECHO;
-import static org.apache.dubbo.common.constants.CommonConstants.PROTOBUF_MESSAGE_CLASS_NAME;
+import static org.apache.dubbo.common.utils.ProtobufUtils.isProtobufClass;
public class ReflectionPackableMethod implements PackableMethod {
@@ -270,21 +270,6 @@ public class ReflectionPackableMethod implements PackableMethod {
return RX_RETURN_CLASS.equalsIgnoreCase(clz.getName());
}
- static boolean isProtobufClass(Class> clazz) {
- while (clazz != Object.class && clazz != null) {
- Class>[] interfaces = clazz.getInterfaces();
- if (interfaces.length > 0) {
- for (Class> clazzInterface : interfaces) {
- if (PROTOBUF_MESSAGE_CLASS_NAME.equalsIgnoreCase(clazzInterface.getName())) {
- return true;
- }
- }
- }
- clazz = clazz.getSuperclass();
- }
- return false;
- }
-
private static String convertHessianFromWrapper(String serializeType) {
if (TripleConstant.HESSIAN4.equals(serializeType)) {
return TripleConstant.HESSIAN2;
diff --git a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml
index a2e3f60645..8e0c24d21e 100644
--- a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml
+++ b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml
@@ -36,9 +36,9 @@
- 1.12.0
+ 1.12.11.2.1
- 1.32.0
+ 1.33.02.17.10.16.0
diff --git a/dubbo-spring-boot/pom.xml b/dubbo-spring-boot/pom.xml
index 30cfd6cc63..632f0090d5 100644
--- a/dubbo-spring-boot/pom.xml
+++ b/dubbo-spring-boot/pom.xml
@@ -41,7 +41,7 @@
2.7.18
- 1.14.10
+ 1.14.114.11.0
diff --git a/pom.xml b/pom.xml
index db9e43a790..ec294592f6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -130,10 +130,10 @@
3.3.0
- 3.0.0
- 3.0.0
+ 3.2.3
+ 3.2.32.8.2
- 3.11.0
+ 3.12.13.3.03.6.39.4.53.v20231009
@@ -255,7 +255,7 @@
maven-dependency-plugin
- 3.5.0
+ 3.6.1