<!-- If you need to report a security issue please visit https://github.com/apache/dubbo/security/policy -->

- [x] I have searched the [issues](https://github.com/apache/dubbo/issues) of this repository and believe that this is not a duplicate.

### Environment

* Dubbo version: 3.1.11
* Operating System version: MAC
* Java version: 1.8

### Steps to reproduce this issue

1. 使用3.1.11的版本定义一个接口提供服务，接口中包含相同名字不同参数的X个方法，那么在provider的url上methods参数就会有多个重复的方法名
2. 在2.6.x的consumer端引用该服务时，methodInvokerMap会根据相同方法名存放X个重复invoker地址，如果默认使用random负载均衡，相当于该provider有着X倍的权重一样，压力会是X倍
3. 在刚升dubbo3的时候，如果一台机器收到的流量是其他机器的X倍，可能压力较大会有风险

![duplicate](https://github.com/apache/dubbo/assets/3276231/fa4c2aab-e13c-4bd8-8b8a-3bfada07175c)
![addMap](https://github.com/apache/dubbo/assets/3276231/79b59170-020a-482e-82e2-0ebd6e162d67)


Pls. provide [GitHub address] to reproduce this issue.

### Expected Behavior

在生成provider url的methods参数时，去掉重复的方法名

### Actual Behavior

同名不同参数的方法名，会在url上生成多次

红圈中是灰度发布一台的重复现象
![methods](https://github.com/apache/dubbo/assets/3276231/6c27459e-dc1b-4ad8-b1bf-57c51115c4d8)


if (getGeneric() == null && getConsumer() != null) {
            setGeneric(getConsumer().getGeneric());
        }
        if (ProtocolUtils.isGeneric(generic)) {
            if (interfaceClass != null && !interfaceClass.equals(GenericService.class)) {
                logger.warn(CONFIG_PROPERTY_CONFLICT, "", "", String.format("Found conflicting attributes for interface type: [interfaceClass=%s] and [generic=%s], " +
                        "because the 'generic' attribute has higher priority than 'interfaceClass', so change 'interfaceClass' to '%s'. " +
                        "Note: it will make this reference bean as a candidate bean of type '%s' instead of '%s' when resolving dependency in Spring.",
                    interfaceClass.getName(), generic, GenericService.class.getName(), GenericService.class.getName(), interfaceClass.getName()));
            }
            interfaceClass = GenericService.class;
        } else {
            try {
                if (getInterfaceClassLoader() != null && (interfaceClass == null || interfaceClass.getClassLoader() != getInterfaceClassLoader())) {
                    interfaceClass = Class.forName(interfaceName, true, getInterfaceClassLoader());
                } else if (interfaceClass == null) {
                    interfaceClass = Class.forName(interfaceName, true, Thread.currentThread()
                            .getContextClassLoader());
                }
            } catch (ClassNotFoundException e) {
                throw new IllegalStateException(e.getMessage(), e);
            }
        }
        checkStubAndLocal(interfaceClass);
        ConfigValidationUtils.checkMock(interfaceClass, this);
        if (StringUtils.isEmpty(url)) {
            checkRegistry();
        }
        resolveFile();
        ConfigValidationUtils.validateReferenceConfig(this);