diff --git a/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java b/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..9997263715d57c082e60d2cf08409128ef92c8ae --- /dev/null +++ b/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java @@ -0,0 +1,15 @@ +package com.aliware.tianchi; + +import org.apache.dubbo.rpc.listener.CallbackListener; + +/** + * @author daofeng.xjf + */ +public class CallbackListenerImpl implements CallbackListener { + + @Override + public void receiveServerMsg(String msg) { + System.out.println("receive msg from server :" + msg); + } + +} diff --git a/workspace-gateway/src/main/resources/META-INF/services/org.apache.dubbo.rpc.listener.CallbackListener b/workspace-gateway/src/main/resources/META-INF/services/org.apache.dubbo.rpc.listener.CallbackListener new file mode 100644 index 0000000000000000000000000000000000000000..4129a2c513165bc21d4acf5a7f4d0ce3b6d71813 --- /dev/null +++ b/workspace-gateway/src/main/resources/META-INF/services/org.apache.dubbo.rpc.listener.CallbackListener @@ -0,0 +1 @@ +com.aliware.tianchi.CallbackListenerImpl \ No newline at end of file diff --git a/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java b/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..ce0e419e49ccb7e4fa970994bb6c5ea5ecd94499 --- /dev/null +++ b/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java @@ -0,0 +1,48 @@ +package com.aliware.tianchi; + +import org.apache.dubbo.common.extension.SPI; +import org.apache.dubbo.rpc.listener.CallbackListener; +import org.apache.dubbo.rpc.service.CallbackService; + +import java.util.Date; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author daofeng.xjf + */ +public class CallbackServiceImpl implements CallbackService { + + public CallbackServiceImpl() { + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!listeners.isEmpty()) { + for (Map.Entry<String, CallbackListener> entry : listeners.entrySet()) { + try { + entry.getValue().receiveServerMsg(new Date().toString()); + } catch (Throwable t1) { + listeners.remove(entry.getKey()); + } + } + } + } + }, 5000, 5000); + } + + private Timer timer = new Timer(); + + /** + * key: listener type + * value: callback listener + */ + private final Map<String, CallbackListener> listeners = new ConcurrentHashMap<>(); + + @Override + public void addListener(String key, CallbackListener listener) { + listeners.put(key, listener); + listener.receiveServerMsg(new Date().toString()); // send notification for change + } +} diff --git a/workspace-provider/src/main/resources/META-INF/services/org.apache.dubbo.rpc.service.CallbackService b/workspace-provider/src/main/resources/META-INF/services/org.apache.dubbo.rpc.service.CallbackService new file mode 100644 index 0000000000000000000000000000000000000000..8a4b397e9745413c22b7b44109d72d560b5e0323 --- /dev/null +++ b/workspace-provider/src/main/resources/META-INF/services/org.apache.dubbo.rpc.service.CallbackService @@ -0,0 +1 @@ +com.aliware.tianchi.CallbackServiceImpl \ No newline at end of file