高级项目
问答社交网站
技术栈
SpringBoot + Mybatis + Redis + MySQL + Python + Solr
功能
- 登录注册
- 发表问题
- 评论(给问题/评论评论)
- 前缀树敏感词过滤
- 点赞(给问题/评论点赞)
- 关注好友/问题
- 搜索
- 不同用户显示不同主页面
- 消息异步
消息异步
异步如何用Redis实现?
使用redis的阻塞队列,每次用户触发一个事件,生产者将会生产一个事件模型,然后序列化放进消息队列中。
而消费者中会开辟一个线程,然后一直在从队列中获取事件,获取不到就阻塞。获取到了之后,通过反序列化,拿到事件模型对象,去config中遍历对应的Handler去处理对应的事件。
Handler定义的是一个接口,声明了处理的逻辑,以及能够处理什么类型的事件。在IOC容器初始化的时候,Consumer就去容器中获取所有的Bean,找到Handler的实现类,
放入config中。后期扩展的时候,如果有新的事件类型要增加,或者新的handler要增加,直接新建一个handler类去实现handler接口,然后标注一个@Component注解,这样
Consumer类又可以注册它,做到了开闭原则。