事件通知
在调用之前,调用之后,出现异常时,会触发oninvoke, onreturn, onthrow三个事件,可以配置当事件发生时,通知哪个类的哪个方法。
消费方实现Notify接口,如下:
1 /** 2 * Version: 3.0 3 * Author: pattywgm 4 * Time: 17/6/29 下午11:01 5 * Desc: 事件通知接口 6 */ 7 public interface Notify { 8 /** 9 * 10 * @param res 返回值 11 * @param args 入参 12 */ 13 public void onreturn(Object res, Object... args); 14 15 /** 16 * 17 * @param ex 异常对象 18 * @param args 入参 19 */ 20 public void onthrow(Throwable ex, Object... args); 21 22 /** 23 * 24 * @param args 入参 25 */ 26 public void oninvoke(Object... args); 27 } 28 29 30 @Service("notifyImpl") 31 public class NotifyImpl implements Notify { 32 @Override 33 public void onreturn(Object res, Object... args) { 34 System.out.println("onreturn:" + res.toString()); 35 36 } 37 38 @Override 39 public void onthrow(Throwable ex, Object... args) { 40 41 System.out.println("onthrow: " + ex.getMessage()); 42 } 43 44 @Override 45 public void oninvoke(Object... args) { 46 System.out.println("oninvoke: " + args[0]); 47 }
配置UserService的findUserById()方法,添加事件通知,如下:
1 <dubbo:reference id="userService" group="db" interface="com.patty.dubbo.api.service.UserService" 2 timeout="10000" retries="3" mock="true" check="false"> 3 <dubbo:method name="findAllUsers" merger="myMerger" cache="lru"> 4 </dubbo:method> 5 <dubbo:method name="findUserById" async="false" onreturn="notifyImpl.onreturn" onthrow="notifyImpl.onthrow"> 6 </dubbo:method> 7 </dubbo:reference>
onreturn指定调用notifyImpl的onreturn方法, onthrow指定调用notifyImpl的onthrow方法。运行中打印结果信息为:
onreturn: UserVo info: name-> 李丽, age -> 23, phoneNo -> 17709801256
onthrow: null pointer happend (在UserService的实现中,模拟抛出一个空指针异常)