HSF异步调用
来源:互联网 发布:vb实例150例 函数调用 编辑:程序博客网 时间:2024/06/16 12:23
1.引入
按照前面的配置、使用方式,实际上使用的是hsf的同步调用,也就是客户端一直等待服务端返回结果。
但是有些是不需要一直等待服务端返回结果的,对于这些服务,hsf提供异步调用的方式,让客户端不必同步阻塞在hsf操作上
2.异步调用
(1)说明
异步调用在发起调用时,HSF service的调用结果都是返回值的默认值,如返回类型是int,则会返回0;返回类型是Object,则会返回null。而真正的结果,是在HSFResponseFuture或者回调函数中获得的。
(2)Future调用
HSF的Future调用类似于JDK的Future,通过HSFResponseFuture.getResponse(int timeout)拿到调用结果
1)在HSFSpringConsumerBean中配置asyncallMethods参数
<bean id="helloService" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean"init-method="init"><property name="interfaceName"><value>com.hsf.HelloWorldService</value></property><property name="version"><value>1.0.0.cpf</value></property><property name="asyncallMethods"><list><!--future 的含义为通过 Future 的方式去获取请求执行的结果,例如先调用下远程的接 口,接着继续做别的事情,然后再通过 Future 来获取结果 --><value>name:sayHello;type:future</value></list></property></bean>2)调用方法
// 发起调用String helloString = helloService.sayHello("lanshan"); //这里返回的 helloString其实是 null//do something else//获取结果helloString = HSFResponseFuture.getResponse(-1);//这里才是真正的返回结果System.out.println(helloString);
(3)Callback调用
HSF服务拿到结果后,会回调用户的接口,所以这里需要用户实现HSFResponseCallback接口
1)添加依赖,scope写成provided
<dependency><groupId>com.taobao.hsf</groupId><artifactId>hsf.app.spring</artifactId><version>2.0.1.7</version><scope>provided</scope></dependency>2)在配置ConsumerBean的时候,和Future调用一样,要写明异步方法
<bean id="helloService" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean"init-method="init"><property name="interfaceName"><value>com.hsf.HelloWorldService</value></property><property name="version"><value>1.0.0.cpf</value></property><property name="asyncallMethods"><list> <value>name:sayHello;type:callback;listener:com.hsf.MyCallbackListener</value> </list></property></bean>3)实现HSFResponseCallback接口,真正执行的逻辑在onAppResponse()方法里
package com.hsf;import com.taobao.hsf.exception.HSFException;import com.taobao.hsf.tbremoting.invoke.CallbackInvocationContext;import com.taobao.hsf.tbremoting.invoke.HSFResponseCallback;public class MyCallbackListener implements HSFResponseCallback {@Overridepublic void onAppException(Throwable arg0) {// TODO Auto-generated method stub}@Overridepublic void onAppResponse(Object appResponse) {System.out.println("callback invoke:" + appResponse + "I can use biz Object:" + CallbackInvocationContext.getContext());}@Overridepublic void onHSFException(HSFException arg0) {// TODO Auto-generated method stub}}
4)调用代码
@Testpublic void test() throws InterruptedException {//必须放在第一句//第一个参数指定hsf所在路径,第二个参数表示版本号HSFEasyStarter.start("d:/hsf/", "1.4.9.5");ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");HelloWorldService service = (HelloWorldService) ctx.getBean("helloService");//必须写上,因为需要等待服务发布ServiceUtil.waitServiceReady(service);Thread.sleep(9000);service.sayHello("cpf");}
0 0
- HSF异步调用
- HSF 入门-发布和调用hsf服务
- hsf dubbo学习六--泛化,回声测试,上下文信息,隐式传参,异步调用,本地调用
- hsf服务的调用过程
- hsf能查看到服务,但是没办法调用
- 异步调用
- 异步调用
- 异步调用
- 异步调用
- 异步调用
- 异步调用
- 异步调用
- 异步调用
- 异步调用
- 异步调用
- 异步调用,异步处理
- HSF学习
- hsf入门
- 诸葛 理解产品、交互和运营
- iOS8,UILabel实现圆角
- Linux和windows之间建立ftp服务器
- python中使用第三方模块
- IntelliJ IDEA 10.5.1 引用外部Jar包
- HSF异步调用
- kinect 手势识别的原理?
- http://blog.csdn.net/kenden23/article/details/17200791
- 快速排序
- java 反射机制实例。
- spring apo使用
- android NDK编译中遇到atof错误
- Nginx+Sticky 负载均衡
- vsftpd 配置虚拟用户