# IntelligentPush **Repository Path**: chiguachigua/intelligent-push ## Basic Information - **Project Name**: IntelligentPush - **Description**: 一个正儿八经的失物推送系统 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-09-03 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 失物信息智能推送系统 ### 一、平台架构设计 基于微信服务号失物推送系统在开发时采用MVC设计模式,主要采用封装的思想,降低平台的耦合性,使平台更加的灵活,易扩展。MVC开始是用于桌面程序开发中使用的, MVC的设计成功的将M和V的实现代码分离,从而使同一批信息可以有多种方式呈现,同一个程序可以被多次利用。Controllerd的作用是确保Model和View的同步,一旦M改变,通过C的控制实现V的同步更新。MVC 分层也给分组开发带来了很大便利。项目成员可以同时开发视图、控制器逻辑和业务逻辑,很大程度缩短了程序开发的期限。平台在采用Spring框架搭建,基于MVC设计模式对Spring框架进行开发,把平台主要编辑为整个平台逻型的Model层、平台的视图模型View层、平台的控制器Controller层、以及公共模块。公共模块是框架开发的公共部分,开发者可直接使用公共模块,极大的提高了开发速率和便捷。在失物推送平台中视图模型采用高性能的移动端框架展示页面,数据处理采用AJAX技术,减轻了数据的访问负担,同时平台基于微信公众号开发,使用户体验更舒适、可观、方便。MVC的工作原理如图4-1-1所示,微信对接原理图如图4-1-2所示。 ![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsEA07.tmp.png) ![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsEA08.tmp.png) 图4-1-1 MVC的工作原理 图4-1-2微信对接原理图 ### 二、系统功能结构设计 通过对用户需求和系统设计思想的分析,后台核心功能划分为三大模块:我拾到、我要找、我要绑定,其中我拾到和我要找按照物品种类划分为:一卡通、学生证、身份证、手机、书籍、其它,我要绑定分为:个人账号、亲友绑定。系统的功能结构图如图4-2-1所示。 ![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsEA09.tmp.jpg) 系统的核心业务分为两部分:向潜在丢失物品的人群发出推送,通过失物信息匹配潜在丢失人群。下面分别详细说明系统在核心业务上的实现原理。 v 推送 向潜在丢失物品的人群发出推送,如邮箱推送、微信服务号推送。 v 匹配 通过拾取到的失物信息匹配潜在丢失人群。 ### 三、详细实现 ***为什么采用基于Redis的MQ*** 为了做到低延时响应,除了在匹配算法进行优化以外,系统同时采用了异步处理对用户发起的失物搜寻请求进行处理。系统没有采用比较流行的第三方组件如RocketMQ、RabbitMQ,选择自实现基于redis的轻量级MQ。因为系统不像市面上的商业软件一样有非常复杂的业务逻辑,不需要第三方MQ组件那么完备的功能,所以可以基于Redis自实现符合系统需求的轻量级MQ。 ***MQ原理结构*** MQ实现原理:系统枚举出需要异步处理的事件,封装至枚举类EventType中,同时创建事件消费者类、事件生产者类、事件处理类。当用户发起事件支持的请求,事件生成者将事件信息封装成EventModel装进(lpush)Redis的List中而事件消费者类内部开了一个循环进程,不停的从List中阻塞读取(brpop)事件,读取到事件之后解析出预先设置好的EventType,把事件交给能够处理的EventHandler做最终处理。 ​ ![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps33A1.tmp.jpg)