dubbo提供了oninvoke、onreturn、onthrow3个事件
oninvoke:调用之前执行,如果被调用的服务有参数,那么oninvoke也必要有和被调用服务一样的参数
onreturn:调用之后执行,至少有一个入参,第一个入参是返回值,其余是调用服务的参数
onthrow:抛出异常后执行,至少一个参数,类型为被抛出服务异常的父类或其本身,其余是调用服务的参数
代码示例:
消费端:
1、定义通知接口和实现类
public interface Notify {
void onreturn(String name, Object...params);
void oninvoke(String name);
void onthrow(Throwable e, Object...params);
}
public class NotifyImpl implements Notify{
public void onreturn(String name, Object...params) {
System.out.println("onreturn-->name:" + name + ",params:" + params.length);
}
public void oninvoke(String name) {
System.out.println("oninvoke-->name:" + name);
}
public void onthrow(Throwable e, Object...params) {
e.printStackTrace();
System.out.println("onthrow-->params:" + params.length);
}
}
2、配置xml,async=是否立即返回值
<bean id="notify" class="com.hdd.NotifyImpl"></bean>
<dubbo:reference interface="com.hdd.api.IHelloWorld" id="helloWorld">
<dubbo:method name="hello" async="false" onreturn="notify.onreturn" onthrow="notify.onthrow" oninvoke="notify.oninvoke"/>
</dubbo:reference>
3、代码调用,helloWorld.get(“a”)是要调用的服务,参数类型为String。
public void testEventNotify() throws IOException {
IHelloWorld helloWorld = (IHelloWorld) applicationContext.getBean("helloWorld");
try {
System.out.println(helloWorld.get("a"));;
System.out.println("end");
} catch (Exception e) {
e.printStackTrace();
}
}
4、打印结果:
oninvoke–>name:a
onreturn–>name:a,params:1
a
end