From d57ecb3c34522c8946d5ad876fe41afcbd21e1f4 Mon Sep 17 00:00:00 2001 From: wardseptember Date: Tue, 31 Mar 2026 15:44:07 +0800 Subject: [PATCH 1/4] feat: add address param --- .gitignore | 1 + .../core/common/config/BaseProtocolConfig.java | 14 ++++++++++++++ .../trpc/core/common/config/ProtocolConfig.java | 10 +++++----- .../trpc/core/common/config/ServiceConfig.java | 3 ++- .../trpc/core/common/config/ServiceConfigTest.java | 2 ++ .../spring/boot/starters/context/BindTest2.java | 2 ++ .../src/test/resources/application-bind-test2.yml | 1 + .../schema/AbstractProtocolSchema.java | 13 +++++++++++++ 8 files changed, 40 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index ccd1d7bd19..6d1bff1ef3 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,7 @@ trpc-selector/trpc-selector-open-polaris/polaris trpc-registry/trpc-registry-open-polaris/polaris **/target deploy.sh +**/jacoco.exec # Codecc .codecc diff --git a/trpc-core/src/main/java/com/tencent/trpc/core/common/config/BaseProtocolConfig.java b/trpc-core/src/main/java/com/tencent/trpc/core/common/config/BaseProtocolConfig.java index 0e9ce8224a..c30f144cd6 100644 --- a/trpc-core/src/main/java/com/tencent/trpc/core/common/config/BaseProtocolConfig.java +++ b/trpc-core/src/main/java/com/tencent/trpc/core/common/config/BaseProtocolConfig.java @@ -151,6 +151,11 @@ public class BaseProtocolConfig implements Serializable, Cloneable { */ @ConfigProperty(value = Constants.DEFAULT_REUSE_PORT, type = Boolean.class, override = true) protected Boolean reusePort; + /** + * Service address. + */ + @ConfigProperty + protected String address; /** * Extension configuration. */ @@ -389,6 +394,15 @@ public void setReusePort(Boolean reusePort) { this.reusePort = reusePort; } + public String getAddress() { + return address; + } + + public void setAddress(String address) { + checkFiledModifyPrivilege(); + this.address = address; + } + public int getBossThreads() { return bossThreads; } diff --git a/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ProtocolConfig.java b/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ProtocolConfig.java index f8cd2c7327..18910c70de 100644 --- a/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ProtocolConfig.java +++ b/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ProtocolConfig.java @@ -40,7 +40,7 @@ public class ProtocolConfig extends BaseProtocolConfig implements Cloneable { protected String ip; protected int port; protected String nic; - protected InetSocketAddress address; + protected InetSocketAddress socketAddress; /** * Protocol type [stream, standard]. */ @@ -110,7 +110,7 @@ public RpcServer createServer() { @Override public String toString() { return "ProtocolConfig [name=" + name + ", ip=" + ip + ", port=" + port + ", nic=" + nic - + ", address=" + address + ", protocol=" + protocol + ", serializationType=" + + ", socketAddress=" + socketAddress + ", protocol=" + protocol + ", serializationType=" + serialization + ", compressorType=" + compressor + ", keepAlive=" + keepAlive + ", charset=" + charset @@ -144,12 +144,12 @@ public ProtocolConfig clone() { * @return InetSocketAddress */ public InetSocketAddress toInetSocketAddress() { - if (address == null) { + if (socketAddress == null) { if (StringUtils.isNotBlank(ip)) { return new InetSocketAddress(ip, port); } } - return address; + return socketAddress; } /** @@ -250,7 +250,7 @@ public ServiceConfig getServiceConfig() { return serviceConfig; } - public void setServiceConfig(ServiceConfig serviceConfig) { + public void setServiceConfig(ServiceConfig serviceConfig) { checkFiledModifyPrivilege(); this.serviceConfig = serviceConfig; } diff --git a/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ServiceConfig.java b/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ServiceConfig.java index 68a2a6ed52..ea86aa7539 100644 --- a/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ServiceConfig.java +++ b/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ServiceConfig.java @@ -421,7 +421,8 @@ public String toString() { + ", lazyinit=" + lazyinit + ", ioMode=" + ioMode + ", ioThreadGroupShare=" + ioThreadGroupShare + ", ioThreads=" + ioThreads + ", workerPool=" + workerPool + ", requestTimeout=" - + requestTimeout + ", filters=" + filters + ", extMap=" + extMap + ", setDefault=" + + requestTimeout + ", filters=" + filters + ", extMap=" + extMap + ", address=" + address + + ", setDefault=" + setDefault + ", inited=" + initialized + ", exported=" + exported + ", registed=" + registered + "]"; diff --git a/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ServiceConfigTest.java b/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ServiceConfigTest.java index 750de084ba..a18ba02a2e 100644 --- a/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ServiceConfigTest.java +++ b/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ServiceConfigTest.java @@ -138,6 +138,7 @@ public void testConfig() { config.setVersion("1"); config.setGroup("b"); config.setCompressMinBytes(10); + config.setAddress("127.0.0.1:9092?topics=quickstart-events&group=quickstart-group"); config.setRegistryConfigs(new ArrayList<>()); config.setDefault(); assertEquals("a", config.getWorkerPool()); @@ -147,6 +148,7 @@ public void testConfig() { assertTrue(config.getEnableLinkTimeout()); assertTrue(config.getRegistryConfigs().isEmpty()); assertTrue(config.getRegistries().isEmpty()); + assertEquals("127.0.0.1:9092?topics=quickstart-events&group=quickstart-group", config.getAddress()); assertEquals("name", config.getName()); assertEquals("127.1.1.1", config.getIp()); assertEquals(8080, config.getPort()); diff --git a/trpc-spring-boot-starters/trpc-spring-boot-starter/src/test/java/com/tencent/trpc/spring/boot/starters/context/BindTest2.java b/trpc-spring-boot-starters/trpc-spring-boot-starter/src/test/java/com/tencent/trpc/spring/boot/starters/context/BindTest2.java index 3d40f2c02f..f4deb2fe20 100644 --- a/trpc-spring-boot-starters/trpc-spring-boot-starter/src/test/java/com/tencent/trpc/spring/boot/starters/context/BindTest2.java +++ b/trpc-spring-boot-starters/trpc-spring-boot-starter/src/test/java/com/tencent/trpc/spring/boot/starters/context/BindTest2.java @@ -101,6 +101,8 @@ private void assertServerService() { Assert.assertEquals(serviceSchema.getWorkerPool(), "woker_pool_provider_test"); Assert.assertEquals(serviceSchema.getEnableLinkTimeout(), true); Assert.assertEquals(serviceSchema.getReusePort(), true); + Assert.assertEquals(serviceSchema.getAddress(), + "127.0.0.1:9092?topics=quickstart-events&group=quickstart-group"); Assert.assertEquals(serviceSchema.getFilters(), Lists.newArrayList("additional_server_filter")); } diff --git a/trpc-spring-boot-starters/trpc-spring-boot-starter/src/test/resources/application-bind-test2.yml b/trpc-spring-boot-starters/trpc-spring-boot-starter/src/test/resources/application-bind-test2.yml index 4a1ce4e48d..ddb47bb4b4 100644 --- a/trpc-spring-boot-starters/trpc-spring-boot-starter/src/test/resources/application-bind-test2.yml +++ b/trpc-spring-boot-starters/trpc-spring-boot-starter/src/test/resources/application-bind-test2.yml @@ -62,6 +62,7 @@ trpc: worker_pool: woker_pool_provider_test enable_link_timeout: true reuse_port: true + address: 127.0.0.1:9092?topics=quickstart-events&group=quickstart-group filters: - additional_server_filter client: diff --git a/trpc-spring-support/trpc-spring/src/main/java/com/tencent/trpc/spring/context/configuration/schema/AbstractProtocolSchema.java b/trpc-spring-support/trpc-spring/src/main/java/com/tencent/trpc/spring/context/configuration/schema/AbstractProtocolSchema.java index ba684e0e15..5b514f0bc2 100644 --- a/trpc-spring-support/trpc-spring/src/main/java/com/tencent/trpc/spring/context/configuration/schema/AbstractProtocolSchema.java +++ b/trpc-spring-support/trpc-spring/src/main/java/com/tencent/trpc/spring/context/configuration/schema/AbstractProtocolSchema.java @@ -131,6 +131,11 @@ public abstract class AbstractProtocolSchema { */ private Integer explicitFlushAfterFlushes; + /** + * Service address + */ + private String address; + /** * Extension configs */ @@ -319,4 +324,12 @@ public Map getExtMap() { public void setExtMap(Map extMap) { this.extMap = extMap; } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } } From 08ec4bd8d9da2f762b97350830604a4883aa99eb Mon Sep 17 00:00:00 2001 From: wardseptember Date: Tue, 31 Mar 2026 15:54:01 +0800 Subject: [PATCH 2/4] feat: add address param --- .../com/tencent/trpc/core/common/config/ProtocolConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ProtocolConfig.java b/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ProtocolConfig.java index 18910c70de..dfcb0839d1 100644 --- a/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ProtocolConfig.java +++ b/trpc-core/src/main/java/com/tencent/trpc/core/common/config/ProtocolConfig.java @@ -90,7 +90,7 @@ protected void setFieldDefault() { BinderUtils.lazyBind(this, ConfigConstants.IP, nic, obj -> NetUtils.resolveMultiNicAddr((String) obj)); BinderUtils.bind(this, ConfigConstants.IO_THREADS, Constants.DEFAULT_IO_THREADS); PreconditionUtils.checkArgument(StringUtils.isNotBlank(ip), "Protocol(%s), ip is null", toSimpleString()); - BinderUtils.bind(this, "address", new InetSocketAddress(this.getIp(), this.getPort())); + BinderUtils.bind(this, "socketAddress", new InetSocketAddress(this.getIp(), this.getPort())); } public RpcClient createClient() { From a606b83de811c3b2b6fd1afea977371f7dc30e09 Mon Sep 17 00:00:00 2001 From: wardseptember Date: Tue, 31 Mar 2026 16:11:38 +0800 Subject: [PATCH 3/4] feat: add address param --- .../common/config/ProtocolConfigTest.java | 41 +++++++++++++++++++ .../core/common/config/ServiceConfigTest.java | 13 ++++++ 2 files changed, 54 insertions(+) diff --git a/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ProtocolConfigTest.java b/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ProtocolConfigTest.java index 78613313d3..88236117ca 100644 --- a/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ProtocolConfigTest.java +++ b/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ProtocolConfigTest.java @@ -14,9 +14,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import java.net.InetSocketAddress; import com.google.common.collect.ImmutableMap; import com.tencent.trpc.core.common.Constants; import org.junit.Test; @@ -129,4 +131,43 @@ public void testConfig() { assertTrue(config.isSetDefault()); assertSame(serviceConfig, config.getServiceConfig()); } + + @Test + public void testSocketAddress() { + ProtocolConfig config = new ProtocolConfig(); + config.setIp("127.0.0.1"); + config.setPort(8080); + config.setDefault(); + InetSocketAddress socketAddress = config.toInetSocketAddress(); + assertNotNull(socketAddress); + assertEquals("127.0.0.1", socketAddress.getHostString()); + assertEquals(8080, socketAddress.getPort()); + } + + @Test + public void testSocketAddressNull() { + ProtocolConfig config = new ProtocolConfig(); + config.setIp("192.168.1.1"); + config.setPort(9090); + InetSocketAddress addr = config.toInetSocketAddress(); + assertNotNull(addr); + assertEquals("192.168.1.1", addr.getHostString()); + assertEquals(9090, addr.getPort()); + } + + @Test + public void testIpBlank() { + ProtocolConfig config = new ProtocolConfig(); + assertNull(config.toInetSocketAddress()); + } + + @Test + public void testToString() { + ProtocolConfig config = new ProtocolConfig(); + config.setIp("127.0.0.1"); + config.setPort(8080); + config.setDefault(); + String str = config.toString(); + assertTrue(str.contains("socketAddress=")); + } } \ No newline at end of file diff --git a/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ServiceConfigTest.java b/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ServiceConfigTest.java index a18ba02a2e..d5f5a5f87c 100644 --- a/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ServiceConfigTest.java +++ b/trpc-core/src/test/java/com/tencent/trpc/core/common/config/ServiceConfigTest.java @@ -236,4 +236,17 @@ public byte[] invoke(RpcClientContext context, byte[] body) { config.register(); config.unRegister(); } + + @Test + public void testToStringContainsAddress() { + ServiceConfig config = new ServiceConfig(); + config.setName("name"); + config.setIp("127.0.0.1"); + config.setPort(8080); + config.setAddress("127.0.0.1:9092?topics=quickstart-events&group=quickstart-group"); + config.setDefault(); + String str = config.toString(); + assertTrue(str.contains("address=")); + assertTrue(str.contains("127.0.0.1:9092?topics=quickstart-events&group=quickstart-group")); + } } From 00a936d4edc6bc53ac57d269d9e3409fa70c62cf Mon Sep 17 00:00:00 2001 From: wardseptember Date: Tue, 31 Mar 2026 17:34:01 +0800 Subject: [PATCH 4/4] feat: add address param --- .../schema/AbstractProtocolSchemaTest.java | 213 ++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 trpc-spring-support/trpc-spring/src/test/java/com/tencent/trpc/spring/context/configuration/schema/AbstractProtocolSchemaTest.java diff --git a/trpc-spring-support/trpc-spring/src/test/java/com/tencent/trpc/spring/context/configuration/schema/AbstractProtocolSchemaTest.java b/trpc-spring-support/trpc-spring/src/test/java/com/tencent/trpc/spring/context/configuration/schema/AbstractProtocolSchemaTest.java new file mode 100644 index 0000000000..ccc1958a81 --- /dev/null +++ b/trpc-spring-support/trpc-spring/src/test/java/com/tencent/trpc/spring/context/configuration/schema/AbstractProtocolSchemaTest.java @@ -0,0 +1,213 @@ +/* + * Tencent is pleased to support the open source community by making tRPC available. + * + * Copyright (C) 2023 Tencent. + * All rights reserved. + * + * If you have downloaded a copy of the tRPC source code from Tencent, + * please note that tRPC source code is licensed under the Apache 2.0 License, + * A copy of the Apache 2.0 License can be found in the LICENSE file. + */ + +package com.tencent.trpc.spring.context.configuration.schema; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import com.google.common.collect.Maps; +import java.util.Map; +import org.junit.Before; +import org.junit.Test; + +public class AbstractProtocolSchemaTest { + + /** + * 使用匿名子类实例化抽象类 + */ + private AbstractProtocolSchema schema; + + @Before + public void setUp() { + schema = new AbstractProtocolSchema() { + }; + } + + @Test + public void testProtocol() { + schema.setProtocol("trpc"); + assertEquals("trpc", schema.getProtocol()); + } + + @Test + public void testProtocolType() { + schema.setProtocolType("stream"); + assertEquals("stream", schema.getProtocolType()); + } + + @Test + public void testSerialization() { + schema.setSerialization("pb"); + assertEquals("pb", schema.getSerialization()); + } + + @Test + public void testCompressor() { + schema.setCompressor("gzip"); + assertEquals("gzip", schema.getCompressor()); + } + + @Test + public void testCompressMinBytes() { + schema.setCompressMinBytes(1024); + assertEquals(Integer.valueOf(1024), schema.getCompressMinBytes()); + } + + @Test + public void testSign() { + schema.setSign("hmac"); + assertEquals("hmac", schema.getSign()); + } + + @Test + public void testKeepAlive() { + schema.setKeepAlive(Boolean.TRUE); + assertEquals(Boolean.TRUE, schema.getKeepAlive()); + + schema.setKeepAlive(Boolean.FALSE); + assertEquals(Boolean.FALSE, schema.getKeepAlive()); + } + + @Test + public void testCharset() { + schema.setCharset("UTF-8"); + assertEquals("UTF-8", schema.getCharset()); + } + + @Test + public void testTransporter() { + schema.setTransporter("netty"); + assertEquals("netty", schema.getTransporter()); + } + + @Test + public void testMaxConns() { + schema.setMaxConns(100); + assertEquals(Integer.valueOf(100), schema.getMaxConns()); + } + + @Test + public void testBacklog() { + schema.setBacklog(512); + assertEquals(Integer.valueOf(512), schema.getBacklog()); + } + + @Test + public void testNetwork() { + schema.setNetwork("tcp"); + assertEquals("tcp", schema.getNetwork()); + } + + @Test + public void testReceiveBuffer() { + schema.setReceiveBuffer(8192); + assertEquals(Integer.valueOf(8192), schema.getReceiveBuffer()); + } + + @Test + public void testSendBuffer() { + schema.setSendBuffer(4096); + assertEquals(Integer.valueOf(4096), schema.getSendBuffer()); + } + + @Test + public void testPayload() { + schema.setPayload(10485760); + assertEquals(Integer.valueOf(10485760), schema.getPayload()); + } + + @Test + public void testIdleTimeout() { + schema.setIdleTimeout(180000); + assertEquals(Integer.valueOf(180000), schema.getIdleTimeout()); + } + + @Test + public void testLazyinit() { + schema.setLazyinit(Boolean.TRUE); + assertEquals(Boolean.TRUE, schema.getLazyinit()); + + schema.setLazyinit(Boolean.FALSE); + assertEquals(Boolean.FALSE, schema.getLazyinit()); + } + + @Test + public void testIoThreadGroupShare() { + schema.setIoThreadGroupShare(Boolean.TRUE); + assertEquals(Boolean.TRUE, schema.getIoThreadGroupShare()); + + schema.setIoThreadGroupShare(Boolean.FALSE); + assertEquals(Boolean.FALSE, schema.getIoThreadGroupShare()); + } + + @Test + public void testIoThreads() { + schema.setIoThreads(8); + assertEquals(Integer.valueOf(8), schema.getIoThreads()); + } + + @Test + public void testFlushConsolidation() { + schema.setFlushConsolidation(Boolean.TRUE); + assertEquals(Boolean.TRUE, schema.getFlushConsolidation()); + + schema.setFlushConsolidation(Boolean.FALSE); + assertEquals(Boolean.FALSE, schema.getFlushConsolidation()); + } + + @Test + public void testBatchDecoder() { + schema.setBatchDecoder(Boolean.TRUE); + assertEquals(Boolean.TRUE, schema.getBatchDecoder()); + + schema.setBatchDecoder(Boolean.FALSE); + assertEquals(Boolean.FALSE, schema.getBatchDecoder()); + } + + @Test + public void testExplicitFlushAfterFlushes() { + schema.setExplicitFlushAfterFlushes(256); + assertEquals(Integer.valueOf(256), schema.getExplicitFlushAfterFlushes()); + } + + @Test + public void testAddress() { + schema.setAddress("127.0.0.1:9092?topics=quickstart-events&group=quickstart-group"); + assertEquals("127.0.0.1:9092?topics=quickstart-events&group=quickstart-group", + schema.getAddress()); + } + + @Test + public void testExtMap() { + // 默认 extMap 不为 null + assertNotNull(schema.getExtMap()); + + Map extMap = Maps.newHashMap(); + extMap.put("key1", "value1"); + extMap.put("key2", 42); + schema.setExtMap(extMap); + + assertEquals(2, schema.getExtMap().size()); + assertEquals("value1", schema.getExtMap().get("key1")); + assertEquals(42, schema.getExtMap().get("key2")); + } + + @Test + public void testDefaultExtMapNotNull() { + // 新建实例时 extMap 默认初始化为空 Map,不为 null + AbstractProtocolSchema newSchema = new AbstractProtocolSchema() { + }; + assertNotNull(newSchema.getExtMap()); + assertTrue(newSchema.getExtMap().isEmpty()); + } +}