- [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.

Because of TripleClientHandler working in a new thread, The line `url.getServiceMode`  doesn't work in TripleClientHandler with InstanceAddressURL when we try to use application-service-discovery.
```java
// => org.apache.dubbo.rpc.protocol.tri.TripleClientHandler#writeRequest
private void writeRequest(ChannelHandlerContext ctx, final Request req, final ChannelPromise promise) {
    final RpcInvocation inv = (RpcInvocation) req.getData();
    final URL url = inv.getInvoker().getUrl();
    // Here will throw NPE
    ConsumerModel consumerModel = (ConsumerModel) url.getServiceModel();
    // ......
}
```

See InstanceAddressURL:
```java
// => org.apache.dubbo.registry.client.InstanceAddressURL#getServiceModel
public ServiceModel getServiceModel() {
    return RpcContext.getServiceContext().getConsumerUrl().getServiceModel();
}

// => org.apache.dubbo.rpc.RpcContext
private static final InternalThreadLocal<RpcServiceContext> SERVICE_CONTEXT = new InternalThreadLocal<RpcServiceContext>() {
    @Override
    protected RpcServiceContext initialValue() {
        return new RpcServiceContext();
    }
};
```

private static final ConnectionManager CONNECTION_MANAGER = ExtensionLoader.getExtensionLoader(
            ConnectionManager.class).getExtension("multiple");
    private final Connection connection;
    private final ReentrantLock destroyLock = new ReentrantLock();
    private final Set<Invoker<?>> invokers;
    public TripleInvoker(Class<T> serviceType, URL url, Set<Invoker<?>> invokers) throws RemotingException {
        super(serviceType, url, new String[]{INTERFACE_KEY, GROUP_KEY, TOKEN_KEY});
        this.invokers = invokers;
        this.connection = CONNECTION_MANAGER.connect(url);
    }
    @Override
    protected Result doInvoke(final Invocation invocation) throws Throwable {
        RpcInvocation inv = (RpcInvocation) invocation;
        final String methodName = RpcUtils.getMethodName(invocation);
        inv.setAttachment(PATH_KEY, getUrl().getPath());
        inv.setAttachment(Constants.SERIALIZATION_KEY,
                getUrl().getParameter(Constants.SERIALIZATION_KEY, Constants.DEFAULT_REMOTING_SERIALIZATION));
        try {
            int timeout = calculateTimeout(invocation, methodName);
            invocation.put(TIMEOUT_KEY, timeout);
            ExecutorService executor = getCallbackExecutor(getUrl(), inv);
            
            Request req = new Request();