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

### Environment

* Dubbo version: 2.7.3-SNAPSHOT
* Operating System version: macOs
* Java version: JDK 1.8

### Steps to reproduce this issue

1. Assume Demo interface have sayHello and sayHi method. 
```
<dubbo:reference id="demoService" interface="com.ctrip.Demo" timeout="1000">
  <dubbo:method name="sayHello">
    <dubbo:parameter key="timeout" value="800"/>
  </dubbo:method>
</dubbo:reference>
```
2. Make a sync call to sayHello, the timeout is 800 but not 1000. We have not get method timeout from the url.

```
asyncResult.get(getUrl().getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS);
```

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

### Expected Result

The timeout should be 1000 for sayHello.

### Actual Result

The timeout is 800 for sayHello.

If there is an exception, please attach the exception trace:

```
Just put your stack trace here!
```

import org.apache.dubbo.rpc.InvokeMode;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.RpcInvocation;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_TIMEOUT;
import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;
/**
 * This class will work as a wrapper wrapping outside of each protocol invoker.
 * @param <T>
 */
public class AsyncToSyncInvoker<T> implements Invoker<T> {
    private Invoker<T> invoker;
    public AsyncToSyncInvoker(Invoker<T> invoker) {
        this.invoker = invoker;
    }
    @Override
    public Class<T> getInterface() {
        return invoker.getInterface();
    }
    @Override
    public Result invoke(Invocation invocation) throws RpcException {
        Result asyncResult = invoker.invoke(invocation);
        try {
            if (InvokeMode.SYNC == ((RpcInvocation)invocation).getInvokeMode()) {
                asyncResult.get(getUrl().getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS);
            }
        } catch (InterruptedException e) {