需求
用户中有人设置了账户余额达到阈值时,短信/邮箱进行提醒的服务。我们将需要在他账户余额阈值达到指定数值的时候进行短信/邮箱消息通知,允许账户余额阈值出现偏差的时候通知,如果某个用户48小时内已经短信/邮箱进行过通知了,那么将不再进行通知。
剖析
存在两个主题:短信通知和邮箱通知
存在两种观察者:设置了短信通知且账户余额到达阈值的用户,设置了邮箱通知且账户余额到达阈值的用户。
用spring的定时器,每10分钟去数据库获取某个主题已经达到阈值且开始了该主题的提醒功能的用户
用spring的@Asycn注解异步短信通知,邮箱通知的相关方法
用redis设置用户短信/邮箱为键名,设置过期时间为48小时。如果获取不到该键值对,说明其在观察者行列
代码
观察者父类
/**
* 订阅观察者
* @author Administrator
*
*/
@Component
//标志为多例
@Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class SubscriberObserver implements Observer{
private String email;
private String phone;
private String username;
@Autowired
UserFunctionService UserFunctionService;
@Override
public void update(Observable o, Object arg) {
if(o instanceof EmailAlertSubject){
UserFunctionService.alertUserEmail(email,username);
}
if(o instanceof PhoneAlertSubject){
UserFunctionService.alertUserPhone(phone,username);
}
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {