- [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();
    }
};
```

ConsumerModel consumerModel = (ConsumerModel) url.getServiceModel();
        MethodDescriptor methodDescriptor = getTriMethodDescriptor(consumerModel,inv);
        ClassLoadUtil.switchContextLoader(consumerModel.getServiceInterfaceClass().getClassLoader());
        AbstractClientStream stream;
        if (methodDescriptor.isUnary()) {
            stream = AbstractClientStream.unary(url);
        } else {
            stream = AbstractClientStream.stream(url);
        }
        String ssl = url.getParameter(CommonConstants.SSL_ENABLED_KEY);
        if (StringUtils.isNotEmpty(ssl)) {
            ctx.channel().attr(TripleConstant.SSL_ATTRIBUTE_KEY).set(Boolean.parseBoolean(ssl));
        }
        stream.service(consumerModel)
            .connection(Connection.getConnectionFromChannel(ctx.channel()))
            .method(methodDescriptor)
            .methodName(methodDescriptor.getMethodName())
            .request(req)
            .serialize((String) inv.getObjectAttachment(Constants.SERIALIZATION_KEY))
            .subscribe(new ClientTransportObserver(ctx, stream, promise));
        if (methodDescriptor.isUnary()) {
            stream.asStreamObserver().onNext(inv);
            stream.asStreamObserver().onCompleted();
        } else {
            Response response = new Response(req.getId(), req.getVersion());
            AppResponse result;
            
            if (methodDescriptor.getRpcType() == MethodDescriptor.RpcType.BIDIRECTIONAL_STREAM
                || methodDescriptor.getRpcType() == MethodDescriptor.RpcType.CLIENT_STREAM) {
                final StreamObserver<Object> streamObserver = (StreamObserver<Object>) inv.getArguments()[0];