From 881e8ed446eecb17259327378207be01a3e877cf Mon Sep 17 00:00:00 2001 From: xujingfeng <jingfeng.xjf@alibaba-inc.com> Date: Wed, 8 May 2019 17:49:54 +0800 Subject: [PATCH] add spi --- .../aliware/tianchi/CallbackListenerImpl.java | 15 ++++++ ...apache.dubbo.rpc.listener.CallbackListener | 1 + .../aliware/tianchi/CallbackServiceImpl.java | 48 +++++++++++++++++++ ...g.apache.dubbo.rpc.service.CallbackService | 1 + 4 files changed, 65 insertions(+) create mode 100644 workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java create mode 100644 workspace-gateway/src/main/resources/META-INF/services/org.apache.dubbo.rpc.listener.CallbackListener create mode 100644 workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java create mode 100644 workspace-provider/src/main/resources/META-INF/services/org.apache.dubbo.rpc.service.CallbackService 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 0000000..9997263 --- /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 0000000..4129a2c --- /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 0000000..ce0e419 --- /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 0000000..8a4b397 --- /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 -- GitLab