diff --git a/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java b/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java index d61d818154763cedadd6e26a8665924ee23f0965..2d8c6a1ed20d3944925db716524a1a6a2c44b25b 100644 --- a/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java +++ b/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java @@ -535,6 +535,7 @@ public class Constants { public static class Attachments { public static final String IS_ASYNC_KEY = "attachments.async"; + public static final String IS_ONEWAY_KEY = "attachments.oneway"; public static final String INVOCATIONID_KEY = "attachments.invocation.id"; } diff --git a/dubbo-demo/dubbo-demo-consumer/src/main/java/com/alibaba/dubbo/demo/consumer/DemoAction.java b/dubbo-demo/dubbo-demo-consumer/src/main/java/com/alibaba/dubbo/demo/consumer/DemoAction.java index 1d174aa7d26eaf991c414387b0bd303518085606..24aa87a97c6b527d4bd2b5487e0671bcf7035024 100644 --- a/dubbo-demo/dubbo-demo-consumer/src/main/java/com/alibaba/dubbo/demo/consumer/DemoAction.java +++ b/dubbo-demo/dubbo-demo-consumer/src/main/java/com/alibaba/dubbo/demo/consumer/DemoAction.java @@ -42,9 +42,10 @@ public class DemoAction { System.out.println("async call ret :" + f.get()); - RpcContext.getContext().onewayCall(new Callable() { - public String call() throws Exception { - return demoService.sayHello("oneway call request"); + RpcContext.getContext().asyncCall(new Runnable() { + public void run() { + demoService.sayHello("oneway call request"); + demoService.sayHello("oneway call request"); } }); diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java index 76b87edcfbb0d3b041387cbc14cf7eb9069bf009..2db5ac46fef851b43055e7a7496c22da20f59c22 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java @@ -573,11 +573,11 @@ public class RpcContext { * oneway调用,只发送请求,不接收返回结果. * @param callable */ - public void onewayCall(Callable callable) { + public void asyncCall(Runnable runable) { try { setAttachment(Constants.Attachments.IS_ONEWAY_KEY, Boolean.TRUE.toString()); - callable.call(); - } catch (Exception e) { + runable.run(); + } catch (Throwable e) { //FIXME 异常是否应该放在future中? throw new RpcException("oneway call error ." + e.getMessage(), e); } finally {