用于传递消息的服务平台: 来自3Y的开源项目: austin-gitee地址 \ austin-giihub地址
项目目录
包名 | 作用 |
---|---|
comon | 公共类 |
cron | 定时任务模块 |
handler | mq消息消费者,调用短信\邮件等服务 |
service-api | 服务接口 |
seervice-api-impl | 服务接口实现 |
stream | Data获取->DB/Redis/Elasticsearch, 实时流处理模块 |
support | 支持 |
datahouse | 数据仓库 处理模块 |
web | Http接口 |
中间件接口
中间件名 | 浏览器访问接口 | 连接地址 |
---|---|---|
mysql | 3306 | |
kafaka | 9000 admin 123456 | 9092 |
redis | 6379 austin | |
apollo | 7002 apollo admin | 7000 |
grafana 服务器监控 | 3000 | |
graylog 日志 | 9009 | 12201 |
XXL-JOB 定时任务 | 6767 | |
Flink 流处理工具 | 8081 |
项目功能
项目日志
使用slf4j进行连接logback
去重功能
去重功能在此项目的业务中,属于 平台性 功能 (在平台上完成)
去重条件:
- 当用户在5分钟内收到相同信息时
- 当用户在当天内,收到某渠道消息5次时
消息发送的流程
接收到请求后,调用对应的业务流程,不同类型的消息有不同的处理流程. 于是将业务抽象为责任链, 执行责任链得到责任链上下文
123
消费消息
项目消费者的设计为: 不同类型消息消费者有自己的资源池,避免消息消费延误. 消费者资源池隔离
根据枚举类不同的消息类型遍历初始化消费者线程池,
接收到消息时从线程池工具中得到对应线程池执行 实现Runnable 接口的类 Task
Task调用多个方法,最后调用HandlerHolder获取类型对应的Handler执行发送业务
//业务执行流程
日志分析
elk- graylog中间件实现
只需要在lockback中设置一下
延时队列
- redis将需要延迟的消息放置Redis,通过Timer轮询得到可执行的消息,将可执行的消息放置不同的Topic供业务方自行消费。
- redis把消息执行的时间定义为key过期的时间,当key触发了过期回调,那说明该消息可执行了