服务应用
服务端将IP,port,Interface,method暴露给消费端。消费者拿到这些信息就可以通过网络来调用服务端的API。

public static void main(String[] args) {
// 当前应用配置
ApplicationConfig application = new ApplicationConfig();
application.setName("consumer-of-helloworld-app");
Map<String, String> appParameters = new HashMap<String, String>();
appParameters.put("qos.enable", "false");
application.setParameters(appParameters);
// 连接注册中心配置
RegistryConfig registry = new RegistryConfig("224.5.6.7:1234", "multicast");
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("unicast", "true");
//registry.setParameters(parameters);
// 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接
// 引用远程服务
// 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏
ReferenceConfig<OrderService> reference = new ReferenceConfig<OrderService>();
reference.setApplication(application);
reference.setRegistry(registry); // 多个注册中心可以用setRegistries()
reference.setInterface(OrderService.class);
reference.setTimeout(2000);
reference.setVersion("1.0.0");
ReferenceConfigCache cache = ReferenceConfigCache.getCache();
// 和本地bean一样使用demoService
OrderService demoService = cache.get(reference); // 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用
OrderModel order = new OrderModel();
order.setOrderName("充值订单");
order.setOrderType(1);
order.setUserId("12306");
String orderNo = demoService.createOrder(order);
logger.debug("获得订单编号:"+orderNo);
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
入口就在cache.get(reference)方法中





















开启客户端连接




默认的dubbo,进入DubboInvoker找到doInvoker()发起通信了 通过protocol的refer里面的getClient()







