diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java index d171ce12435..58058f4f64f 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java +++ b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java @@ -163,6 +163,7 @@ private Object decode(TProtocol protocol) // version String serviceName; + String path; long id; TMessage message; @@ -171,6 +172,7 @@ private Object decode(TProtocol protocol) protocol.readI16(); protocol.readByte(); serviceName = protocol.readString(); + path = protocol.readString(); id = protocol.readI64(); message = protocol.readMessageBegin(); } catch (TException e) { @@ -181,6 +183,7 @@ private Object decode(TProtocol protocol) RpcInvocation result = new RpcInvocation(); result.setAttachment(Constants.INTERFACE_KEY, serviceName); + result.setAttachment(Constants.PATH_KEY, path); result.setMethodName(message.name); String argsClassName = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class) @@ -496,6 +499,8 @@ private void encodeRequest(Channel channel, ChannelBuffer buffer, Request reques protocol.writeByte(VERSION); // service name protocol.writeString(serviceName); + // path + protocol.writeString(inv.getAttachment(Constants.PATH_KEY)); // dubbo request id protocol.writeI64(request.getId()); protocol.getTransport().flush(); diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java index 958d8e63234..055af6f8bb3 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java +++ b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java @@ -63,9 +63,9 @@ public CompletableFuture reply(ExchangeChannel channel, Object msg) thro if (msg instanceof Invocation) { Invocation inv = (Invocation) msg; - String serviceName = inv.getAttachments().get(Constants.INTERFACE_KEY); + String path = inv.getAttachments().get(Constants.PATH_KEY); String serviceKey = serviceKey(channel.getLocalAddress().getPort(), - serviceName, null, null); + path, null, null); DubboExporter exporter = (DubboExporter) exporterMap.get(serviceKey); if (exporter == null) { throw new RemotingException(channel, diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodecTest.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodecTest.java index c738a46a32a..c2277f7fba5 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodecTest.java +++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodecTest.java @@ -93,6 +93,8 @@ public void testEncodeRequest() throws Exception { Assertions.assertEquals(ThriftCodec.VERSION, protocol.readByte()); // service name Assertions.assertEquals(Demo.Iface.class.getName(), protocol.readString()); + // path + Assertions.assertEquals(Demo.Iface.class.getName(), protocol.readString()); // dubbo request id Assertions.assertEquals(request.getId(), protocol.readI64()); @@ -148,6 +150,8 @@ public void testDecodeReplyResponse() throws Exception { protocol.writeI16(Short.MAX_VALUE); protocol.writeByte(ThriftCodec.VERSION); protocol.writeString(Demo.Iface.class.getName()); + // path + protocol.writeString(Demo.Iface.class.getName()); protocol.writeI64(request.getId()); protocol.getTransport().flush(); headerLength = bos.size(); @@ -221,6 +225,8 @@ public void testDecodeExceptionResponse() throws Exception { protocol.writeI16(Short.MAX_VALUE); protocol.writeByte(ThriftCodec.VERSION); protocol.writeString(Demo.class.getName()); + // path + protocol.writeString(Demo.class.getName()); protocol.writeI64(request.getId()); protocol.getTransport().flush(); headerLength = bos.size(); @@ -396,6 +402,9 @@ public void testDecodeRequest() throws Exception { protocol.writeString( ((RpcInvocation) request.getData()) .getAttachment(Constants.INTERFACE_KEY)); + protocol.writeString( + ((RpcInvocation) request.getData()) + .getAttachment(Constants.PATH_KEY)); protocol.writeI64(request.getId()); protocol.getTransport().flush(); headerLength = bos.size(); @@ -448,6 +457,7 @@ private Request createRequest() { invocation.setParameterTypes(new Class[]{String.class}); invocation.setAttachment(Constants.INTERFACE_KEY, Demo.Iface.class.getName()); + invocation.setAttachment(Constants.PATH_KEY, Demo.Iface.class.getName()); Request request = new Request(1L);