1. 程式人生 > >Dubbo探索(五)

Dubbo探索(五)

enc system 之前 reference ssa timeout check hone all

事件通知

在調用之前,調用之後,出現異常時,會觸發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的實現中,模擬拋出一個空指針異常)

代碼參考:https://github.com/pattywgm/dubbo-demo.git

Dubbo探索(五)