前言
1):业务逻辑是这样的>>小程序中有一个提醒功能,该功能有一个提醒时间,时间到了就给用户发送一个提醒,这里的提醒采用的微信的订阅消息服务
2):由于这个业务的并没有要求太严格的实时性,误差几分钟都是可以的。所以这里采用redis的监听器
内容
1):配置redis (在redis.conf中放开这行)
2):在代码中添加监听
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
3):添加键失效后需要触发的代码
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
private static Logger logger = LoggerFactory.getLogger(RedisKeyExpirationListener.class);
private static final Topic KEYEVENT5_EXPIRED_TOPIC = new PatternTopic("__keyevent@13__:expired"); //设置监听库为13
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void doRegister(RedisMessageListenerContainer listenerContainer) {
listenerContainer.addMessageListener(this, KEYEVENT5_EXPIRED_TOPIC);
}
/**
* 针对redis数据失效事件,进行数据处理
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
String expiredKey = message.toString();//获取当前失效的ID
/** (你的业务逻辑)
* 在这个地方根据失效的键去数据库查询相关数据
然后调用微信的订阅通知再发送给用户
*/
}
4)需要看微信订阅通知的 请点击这里