We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在调用之前、调用之后、出现异常时的事件通知
在调用之前、调用之后、出现异常时,会触发 oninvoke、onreturn、onthrow 三个事件,可以配置当事件发生时,通知哪个类的哪个方法。
oninvoke
onreturn
onthrow
interface IDemoService { public Person get(int id); }
class NormalDemoService implements IDemoService { public Person get(int id) { return new Person(id, "charles`son", 4); } }
<dubbo:application name="rpc-callback-demo" /> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <bean id="demoService" class="org.apache.dubbo.callback.implicit.NormalDemoService" /> <dubbo:service interface="org.apache.dubbo.callback.implicit.IDemoService" ref="demoService" version="1.0.0" group="cn"/>
interface Notify { public void onreturn(Person msg, Integer id); public void onthrow(Throwable ex, Integer id); }
class NotifyImpl implements Notify { public Map<Integer, Person> ret = new HashMap<Integer, Person>(); public Map<Integer, Throwable> errors = new HashMap<Integer, Throwable>(); public void onreturn(Person msg, Integer id) { System.out.println("onreturn:" + msg); ret.put(id, msg); } public void onthrow(Throwable ex, Integer id) { errors.put(id, ex); } }
<bean id ="demoCallback" class = "org.apache.dubbo.callback.implicit.NotifyImpl" /> <dubbo:reference id="demoService" interface="org.apache.dubbo.callback.implicit.IDemoService" version="1.0.0" group="cn" > <dubbo:method name="get" async="true" onreturn = "demoCallback.onreturn" onthrow="demoCallback.onthrow" /> </dubbo:reference>
callback 与 async 功能正交分解,async=true 表示结果是否马上返回,onreturn 表示是否需要回调。
callback
async
async=true
两者叠加存在以下几种组合情况:
async=true onreturn="xxx"
async=false onreturn="xxx"
async=false
IDemoService demoService = (IDemoService) context.getBean("demoService"); NotifyImpl notify = (NotifyImpl) context.getBean("demoCallback"); int requestId = 2; Person ret = demoService.get(requestId); Assert.assertEquals(null, ret); //for Test:只是用来说明callback正常被调用,业务具体实现自行决定. for (int i = 0; i < 10; i++) { if (!notify.ret.containsKey(requestId)) { Thread.sleep(200); } else { break; } } Assert.assertEquals(requestId, notify.ret.get(requestId).getId());
The text was updated successfully, but these errors were encountered:
No branches or pull requests
在调用之前、调用之后、出现异常时的事件通知
背景
在调用之前、调用之后、出现异常时,会触发
oninvoke
、onreturn
、onthrow
三个事件,可以配置当事件发生时,通知哪个类的哪个方法。示例
服务提供者与消费者共享服务接口
服务提供者实现
服务提供者配置
服务消费者 Callback 接口
服务消费者 Callback 实现
服务消费者 Callback 配置
callback
与async
功能正交分解,async=true
表示结果是否马上返回,onreturn
表示是否需要回调。两者叠加存在以下几种组合情况:
async=true onreturn="xxx"
async=false onreturn="xxx"
async=true
async=false
测试代码
The text was updated successfully, but these errors were encountered: