
对于客户端,我们就直接使用 RedisTemplate 就好了,它是对客户端的高度封装,已经挺好使的了。
05、去重功能业务任何的功能代码实现都离不开业务场景,在聊代码实现之前,先聊业务!平时在做需求的时候,我也一直信奉着: 先搞懂业务要做什么,再实现功能 。
去重该功能在austin项目里我是把它定位是: 平台性功能 。要理解这点很重要!不要想着把业务的各种的重逻辑都在平台上做,这是不合理的。
这里只能是把 共性 的去重功能给做掉,跟 业务强挂钩 应由业务方自行实现。所以,我目前在这里实现的是:
- 5分钟内相同用户如果收到相同的内容,则应该被过滤掉。 实现理由 :很有可能由于 MQ重复消费 又或是 业务方不谨慎调用 ,导致相同的消息在 短时间内 被austin消费,进而发送给用户。有了该去重,我们可以 在一定程度下 减少事故的发生。
- 一天内相同的用户如果已经收到某渠道的内容5次,则应该被过滤掉。 实现理由 :在运营或者业务推送下,有可能某些用户在一天内会多次收到推送消息。 避免对用户带来过多的打扰 ,从总体定下规则一天内用户只能收到N条消息。
不排除随着业务的发展,还有些需要我们去做的去重功能,但还是要记住,我们这里不跟业务 强挂钩 。

当我们的核心功能依赖其他中间件的时候,我们尽可能 避免由于中间件的异常导致我们核心的功能无法正常使用 。比如,redis如果挂了,也不应该影响我们正常消息的下发,它只能影响到去重的功能。

在之前,我们已经从Kafka拉取消息后,然后把消息放到各自的线程池进行处理了,去重的功能我们只需要在发送之前就好了。
