同步调用 是指调用线程在服务提供方返回结果前需要被阻塞,异步调用则是消费端发起调用后会马上返回。 (然后服务方处理完成之后,通过回调的形式将结果告知给消费方。)
在dubbo 2.6.*版本中
1.通过RpcContext.getContext().getFuture()来获取到 Future对象,然后通过
Future.get()方法获取到结果
案例
服务提供者
public static void main(String[] args) throws IOException {
//创建ServiceConfig实例
ServiceConfig<GreetingService> serviceConfig=new ServiceConfig<GreetingService>();
//设置应用程序配置
serviceConfig.setApplication(new ApplicationConfig("first-dubbo-provider"));
//设置服务注册中心信息
RegistryConfig registryConfig=new RegistryConfig("multicast://224.5.6.7:1234");
serviceConfig.setRegistry(registryConfig);
//设置接口与实现类
serviceConfig.setInterface(GreetingService.class);
serviceConfig.setRef(new GreetingServiceImpl());
//设置服务分组与版本
serviceConfig.setVersion("1.0.0");
serviceConfig.setGroup("dubbo");
//导出服务
//启动了nettyServer监听请求,并将服务注册到服务注册中心
serviceConfig.export();
//挂起线程 避免服务停止
System.out.println("server is started");
System.in.read();
}
服务消费者
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建服务引用对象实例
ReferenceConfig<GreetingService> referenceConfig=new ReferenceConfig<GreetingService>();
//设置应用信息
referenceConfig.setApplication(new ApplicationConfig("first-dubbo-consumer"));
//设置服务注册中心 zookeeper://127.0.0.1:2181 广播模式 multicast://224.5.6.7:1234
referenceConfig.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
//设置服务接口和超时时间
referenceConfig.setInterface(GreetingService.class);
referenceConfig.setTimeout(5000);
//设置服务分组与版本
referenceConfig.setVersion("1.0.0");
referenceConfig.setGroup("dubbo");
//设置为异步
referenceConfig.setAsync(true);
//引用服务
GreetingService greetingService=referenceConfig.get();
//设置隐式参数
RpcContext.getContext().setAttachment("company","alibaba");
//调用服务
System.out.println(greetingService.sayHello("world")