DUBBO泛化调用原理与设计思想 Published on Mar 29, 2023 in 随笔 with 0 comment 1 泛化调用实例 对于JAVA服务端开发者而言在使用Dubbo时并不经常使用泛化调用,通常方法是在生产者发布服务之后,消费者可以通过引入生产者提供的client进行调用。那么泛化调用使用场景是什么呢? 第一种场景是消费者不希望引入生产者提供的client依赖,只希望关注调用哪个方法,需要传什么参数即可。第二种场景是消费者不是使用Java语言,而是使用例如Python语言,那么如何调用使用Java语言生产者提供的服务呢?这时我们可以选择泛化调用。 泛化调用使用方法并不复杂,下面我们编写一个泛化调用实例。首先生产者发布服务,这与普通服务发布没有任何区别。 ``` package com.java.front.dubbo.demo.provider; public interface HelloService { public String sayHelloGeneric(Person person, String message); } public class HelloServiceImpl implements HelloService { @Override public String sayHelloGeneric(Person person, String message) throws Exception { String result = "hello[" + person + "],message=" + message; return result; } } ``` Person类声明: ``` ``` 消费者代码有所不同: ``` import org.apache.dubbo.config.ApplicationConfig; import org.apache.dubbo.config.ReferenceConfig; import org.apache.dubbo.config.RegistryConfig; import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.service.GenericService; public class Consumer { public static void testGeneric() { ReferenceConfig reference = new ReferenceConfig(); reference.setApplication(new ApplicationConfig("java-front-consumer")); reference.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181")); reference.setInterface("com.java.front.dubbo.demo.provider.HelloService"); reference.setGeneric(true); GenericService genericService = reference.get(); Map person = new HashMap(); person.put("name", "微信公众号「JAVA前线」"); String message = "你好"; Object result = genericService.$invoke("sayHelloGeneric", new String[] { "com.java.front.dubbo.demo.provider.model.Person", "java.lang.String" }, new Object[] { person, message }); System.out.println(result); } } ``` 本文由 admin 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。