diff --git a/core/api/src/main/java/com/alipay/sofa/rpc/config/ConsumerConfig.java b/core/api/src/main/java/com/alipay/sofa/rpc/config/ConsumerConfig.java index 031a9316a..2dfa5ef4c 100644 --- a/core/api/src/main/java/com/alipay/sofa/rpc/config/ConsumerConfig.java +++ b/core/api/src/main/java/com/alipay/sofa/rpc/config/ConsumerConfig.java @@ -933,8 +933,11 @@ public int getMethodRetries(String methodName) { * @return the time out */ public int getMethodTimeout(String methodName) { - return (Integer) getMethodConfigValue(methodName, RpcConstants.CONFIG_KEY_TIMEOUT, - getTimeout()); + Object methodTimeout = getMethodConfigValue(methodName, RpcConstants.CONFIG_KEY_TIMEOUT); + if (methodTimeout == null || ((Integer) methodTimeout) == 0) { + return getTimeout(); + } + return (Integer) methodTimeout; } /** diff --git a/core/api/src/test/java/com/alipay/sofa/rpc/config/ConsumerConfigTest.java b/core/api/src/test/java/com/alipay/sofa/rpc/config/ConsumerConfigTest.java new file mode 100644 index 000000000..fee8a56a4 --- /dev/null +++ b/core/api/src/test/java/com/alipay/sofa/rpc/config/ConsumerConfigTest.java @@ -0,0 +1,41 @@ +package com.alipay.sofa.rpc.config; + +import com.alipay.sofa.rpc.invoke.Invoker; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Even + * @date 2025/3/4 21:36 + */ +public class ConsumerConfigTest { + + @Test + public void testMethodTimeout() { + ConsumerConfig consumerConfig = new ConsumerConfig<>(); + consumerConfig.setTimeout(4000); + consumerConfig.setInterfaceId(Invoker.class.getName()); + consumerConfig.getConfigValueCache(true); + Assert.assertEquals(4000, consumerConfig.getMethodTimeout("invoke")); + + List methodConfigs = new ArrayList<>(); + MethodConfig methodConfig = new MethodConfig(); + methodConfig.setName("invoke"); + methodConfigs.add(methodConfig); + consumerConfig.setMethods(methodConfigs); + consumerConfig.getConfigValueCache(true); + Assert.assertEquals(4000, consumerConfig.getMethodTimeout("invoke")); + + methodConfig.setTimeout(5000); + consumerConfig.getConfigValueCache(true); + Assert.assertEquals(5000, consumerConfig.getMethodTimeout("invoke")); + + methodConfig.setTimeout(-1); + consumerConfig.getConfigValueCache(true); + Assert.assertEquals(-1, consumerConfig.getMethodTimeout("invoke")); + } + +} \ No newline at end of file