diff --git a/notify-core/src/main/java/com/cicdi/notify/AbstractNotifier.java b/notify-core/src/main/java/com/cicdi/notify/AbstractNotifier.java
index b2454ee..cba8e91 100644
--- a/notify-core/src/main/java/com/cicdi/notify/AbstractNotifier.java
+++ b/notify-core/src/main/java/com/cicdi/notify/AbstractNotifier.java
@@ -6,10 +6,16 @@ import com.cicdi.notify.template.TemplateManager;
import java.util.Map;
/**
+ * 通知器抽象实现
+ *
实现了通用的发送方法,还需要具体服务商继承此类,实现全部的方法
+ *
* @author xueye
*/
public abstract class AbstractNotifier implements Notifier {
+ /**
+ * 通知模板管理器,用于获取当前通知类型使用的通知模板
+ */
private final TemplateManager templateManager;
public AbstractNotifier(TemplateManager templateManager) {
@@ -20,8 +26,10 @@ public abstract class AbstractNotifier implements Notifier context) {
Template template = templateManager.getTemplate(this.getType(), templateId);
if (null == template) {
- throw new UnsupportedOperationException("模版不存在:" + templateId);
+ throw new UnsupportedOperationException("指定的模版不存在:" + templateId);
}
this.send((T) template, context);
}
+
+
}
diff --git a/notify-core/src/main/java/com/cicdi/notify/AbstractNotifierManager.java b/notify-core/src/main/java/com/cicdi/notify/AbstractNotifierManager.java
index a2bc75e..cd09385 100644
--- a/notify-core/src/main/java/com/cicdi/notify/AbstractNotifierManager.java
+++ b/notify-core/src/main/java/com/cicdi/notify/AbstractNotifierManager.java
@@ -6,14 +6,18 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
+ * 通知器管理器抽象实现
+ * 实现了全部的接口,抽象的目的是为了方便实现Spring的自动装配回接口,实现服务商的自动注册
+ *
* @author xueye
*/
public abstract class AbstractNotifierManager implements NotifierManager {
+
private final Map> providers = new ConcurrentHashMap<>();
- private Map notifiers = new ConcurrentHashMap<>();
+ private final Map notifiers = new ConcurrentHashMap<>();
- private NotifyConfigManager configManager;
+ private final NotifyConfigManager configManager;
// private EventBus eventBus;
@@ -22,10 +26,24 @@ public abstract class AbstractNotifierManager implements NotifierManager {
// this.eventBus = eventBus;
}
- protected NotifierProperties getProperties(NotifyType notifyType, String id) {
- return configManager.getNotifyConfig(notifyType, id);
+ @Override
+ public Notifier getNotifier(NotifyType type, String id) {
+ Notifier notifier;
+ if (null == notifiers.get(id)) {
+ notifier = createNotifier(getProperties(type, id));
+ } else {
+ notifier = notifiers.get(id);
+ }
+ return notifier;
}
+ @Override
+ public void register(NotifierProvider provider) {
+ providers.computeIfAbsent(provider.getType().getId(), ignore -> new ConcurrentHashMap<>())
+ .put(provider.getProvider().getId(), provider);
+ }
+
+ @Override
public void reload(String id) {
Notifier notifier = notifiers.remove(id);
if (null != notifier) {
@@ -33,6 +51,23 @@ public abstract class AbstractNotifierManager implements NotifierManager {
}
}
+ /**
+ * 根据通知配置属性ID获取通知配置属性
+ *
+ * @param notifyType 通知类型
+ * @param id 通知配置属性ID
+ * @return 通知配置属性
+ */
+ protected NotifierProperties getProperties(NotifyType notifyType, String id) {
+ return configManager.getNotifyConfig(notifyType, id);
+ }
+
+ /**
+ * 根据配置创建通知器
+ *
+ * @param properties 通知器配置属性
+ * @return 通知器
+ */
protected Notifier createNotifier(NotifierProperties properties) {
Map providerMap = providers.get(properties.getType());
if (null == providerMap) {
@@ -42,7 +77,7 @@ public abstract class AbstractNotifierManager implements NotifierManager {
if (null == provider) {
throw new UnsupportedOperationException("不支持的服务商: " + properties.getProvider());
}
- Notifier extends Template> notifier1 = provider.createNotifier(properties);
+ Notifier notifier1 = provider.createNotifier(properties);
Notifier notifier2 = notifiers.put(properties.getId(), notifier1);
if (null != notifier2) {
notifier2.close();
@@ -50,19 +85,4 @@ public abstract class AbstractNotifierManager implements NotifierManager {
return notifier1;
}
- @Override
- public Notifier getNotifier(NotifyType type, String id) {
- Notifier notifier = notifiers.get(id);
- if (null == notifier) {
- notifier = createNotifier(getProperties(type, id));
- }
- return notifier;
- }
-
- @Override
- public void registerProvider(NotifierProvider provider) {
- providers.computeIfAbsent(provider.getType().getId(), ignore -> new ConcurrentHashMap<>())
- .put(provider.getProvider().getId(), provider);
- }
-
}
diff --git a/notify-core/src/main/java/com/cicdi/notify/DefaultNotifyType.java b/notify-core/src/main/java/com/cicdi/notify/DefaultNotifyType.java
index ac34440..cd13117 100644
--- a/notify-core/src/main/java/com/cicdi/notify/DefaultNotifyType.java
+++ b/notify-core/src/main/java/com/cicdi/notify/DefaultNotifyType.java
@@ -1,7 +1,7 @@
package com.cicdi.notify;
/**
- * 默认通知类型
+ * 默认支持的通知类型
*
* @author xueye
*/
@@ -12,6 +12,9 @@ public enum DefaultNotifyType implements NotifyType {
wechat("微信"),
dingTalk("钉钉");
+ /**
+ * 通知类型名称
+ */
private final String name;
DefaultNotifyType(String name) {
diff --git a/notify-core/src/main/java/com/cicdi/notify/Notifier.java b/notify-core/src/main/java/com/cicdi/notify/Notifier.java
index 151368d..718d70a 100644
--- a/notify-core/src/main/java/com/cicdi/notify/Notifier.java
+++ b/notify-core/src/main/java/com/cicdi/notify/Notifier.java
@@ -5,42 +5,49 @@ import com.cicdi.notify.template.Template;
import java.util.Map;
/**
- * 通知器
+ * 消息通知器
*
- * @param 通知模板
* @author xueye
*/
public interface Notifier {
/**
+ * 获取通知器唯一标识
+ *
* @return 通知器唯一标识
*/
String getNotifierId();
/**
- * @return 通知器类型
+ * 获取通知类型
+ *
+ * @return 通知类型
* @see NotifyType
*/
NotifyType getType();
/**
- * @return 通知提供商
+ * 获取服务商
+ *
+ * @return 通知服务商
*/
Provider getProvider();
/**
- * 指定模板ID进行发送
+ * 指定通知模板ID进行发送
+ * 用于一些固定模板的消息发送,例如验证码、定时消息
*
- * @param templateId 模板唯一标识
- * @param context 上下文
+ * @param templateId 通知模板ID
+ * @param context 模板上下文参数
*/
void send(String templateId, Map context);
/**
- * 指定模板进行发送
+ * 指定通知模板进行发送
+ * 提供一个通知模板进行消息发送,比较灵活,适用于一些一次性的消息推送
*
* @param template 通知模板
- * @param context 上下文
+ * @param context 模板上下文参数
*/
void send(T template, Map context);
@@ -49,7 +56,15 @@ public interface Notifier {
*/
void close();
+ /**
+ * 将此通知器转换成特定类型通知器
+ *
+ * @param type 目标类型类
+ * @param 目标类型
+ * @return 目标类型通知器
+ */
default > R unwrap(Class type) {
return type.cast(this);
}
+
}
diff --git a/notify-core/src/main/java/com/cicdi/notify/NotifierManager.java b/notify-core/src/main/java/com/cicdi/notify/NotifierManager.java
index 1d16ad8..1eaaf2e 100644
--- a/notify-core/src/main/java/com/cicdi/notify/NotifierManager.java
+++ b/notify-core/src/main/java/com/cicdi/notify/NotifierManager.java
@@ -3,7 +3,7 @@ package com.cicdi.notify;
import com.cicdi.notify.template.Template;
/**
- * 通知器管理
+ * 通知器管理器,用于获取获取通知器
*
* @author xueye
*/
@@ -11,12 +11,22 @@ public interface NotifierManager {
/**
* @param type 通知类型 {@link NotifyType}
- * @param id 唯一标识
- * @param 模板类型
+ * @param id 通知器唯一标识
+ * @param 通知模板类型
* @return 通知器
+ * @see NotifierProvider
*/
Notifier getNotifier(NotifyType type, String id);
+ /**
+ * 注册通知服务商
+ * 服务商经过注册之后才可以使用, 如果通知模板配置的服务商不在已注册集合中, 将会抛出{@link UnsupportedOperationException}
+ *
+ * @param provider 通知服务商
+ * @see UnsupportedOperationException
+ */
+ void register(NotifierProvider provider);
+
/**
* 重新加载通知管理器
*
@@ -24,5 +34,4 @@ public interface NotifierManager {
*/
void reload(String id);
- void registerProvider(NotifierProvider provider);
}
diff --git a/notify-core/src/main/java/com/cicdi/notify/NotifierProperties.java b/notify-core/src/main/java/com/cicdi/notify/NotifierProperties.java
index 0c030f2..da4180b 100644
--- a/notify-core/src/main/java/com/cicdi/notify/NotifierProperties.java
+++ b/notify-core/src/main/java/com/cicdi/notify/NotifierProperties.java
@@ -1,51 +1,63 @@
package com.cicdi.notify;
+import java.io.Serializable;
import java.util.Map;
import java.util.Optional;
/**
- * 通知器属性
+ * 通知配置属性
*
* @author xueye
*/
-public class NotifierProperties {
+public class NotifierProperties implements Serializable {
/**
- * 唯一标识
+ * 通知配置属性唯一标识
*/
private String id;
/**
- * 通知类型标识
+ * 通知类型
*
* @see NotifyType
*/
private String type;
/**
- * 通知服务提供商标识,如: aliyun ...
+ * 通知服务商标识
*/
private String provider;
/**
- * 配置名称
+ * 通知配置名称
*/
private String name;
/**
- * 配置内容,不同的服务提供商,配置不同.
+ * 通知配置内容
*
* @see NotifierProvider
*/
private Map configuration;
-
+ /**
+ * 获取通知配置值
+ *
+ * @param key 通知配置项
+ * @return 通知配置项值
+ */
public Optional