You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

188 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1992e010510f4930923869be65fb8241~tplv-k3u1fbpfcp-zoom-1.image)
<p align="center">
<a href="#"><img src="https://img.shields.io/badge/Author-3y-orange.svg" alt="作者"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/项目群-交流-red.svg" alt="项目群交流"></a>
<a href="https://space.bilibili.com/198434865/channel/collectiondetail?sid=435119"><img src="https://img.shields.io/badge/免费项目-视频-green.svg" alt="Bilibili"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/如何准备-面试-yellow.svg" alt="对线面试官"></a>
<a href="https://gitee.com/zhongfucheng/austin"><img src="https://gitee.com/zhongfucheng/austin/badge/star.svg?theme=dark" alt="Gitee Starts"></a>
<a href="https://gitee.com/zhongfucheng/austin"><img src="https://gitee.com/zhongfucheng/austin/badge/fork.svg?theme=dark" alt="Gitee Starts"></a>
<a href="https://github.com/ZhongFuCheng3y/austin"><img src="https://img.shields.io/github/forks/ZhongFuCheng3y/austin.svg?style=flat&label=GithubFork"></a>
<a href="https://github.com/ZhongFuCheng3y/austin"><img src="https://img.shields.io/github/stars/ZhongFuCheng3y/austin.svg?style=flat&label=GithubStars"></a>
<a href="#项目交流"><img src="https://img.shields.io/github/issues/ZhongFuCheng3y/austin" alt="issue-open"></a>
<a href="#项目交流"><img src="https://img.shields.io/github/issues-closed/ZhongFuCheng3y/austin" alt="issue-close"></a>
<a href="#项目交流"><img src="https://img.shields.io/github/issues-pr/ZhongFuCheng3y/austin" alt="issue-close"></a>
<a href="#项目交流"><img src="https://img.shields.io/github/issues-pr-closed/ZhongFuCheng3y/austin" alt="issue-close"></a>
<a href="#项目交流"><img src="https://img.shields.io/github/license/ZhongFuCheng3y/austin" alt="issue-close"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/JDK-8-red.svg" alt="jdk版本"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/SpringBoot-2.5.6-green.svg" alt="SpringBoot版本"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/Centos-7.6-blue.svg" alt="Centos版本"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/MySQL-5.7.x-orange.svg" alt="MySQL版本"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/maven-3.6.x-red.svg" alt="maven版本"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/ORM-SpringDataJPA-blue.svg" alt="ORM框架"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/Cache-Redis-orange.svg" alt="ORM框架"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/分布式定时任务-xxljob-green.svg" alt="分布式定时任务"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/分布式配置中心-Apollo&Nacos-blue.svg" alt="分布式配置中心"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/分布式消息队列-Kafka-red.svg" alt="分布式消息队列"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/分布式日志采集-Graylog-orange.svg" alt="分布式日志采集"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/分布式计算引擎-Flink-red.svg" alt="计算引擎"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/监控组件-Promethus-blue.svg" alt="系统监控"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/监控可视化-Grafana-green.svg" alt="系统监控"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/系统部署-Docker&DockerCompose-yellow.svg" alt="部署"></a>
<a href="#项目交流"><img src="https://img.shields.io/badge/前端页面-amis-red.svg" alt="前端"></a>
</p>
:fire:项目在线演示地址:[http://139.9.66.219:3000/](http://139.9.66.219:3000/)
:fire:项目视频我正在[Bilibili](https://space.bilibili.com/198434865/channel/collectiondetail?sid=435119)更新(**三连越多,更新越有动力哟**
:fire:项目笔记关注公众号**Java3y**回复「austin」即可获取还能**加项目交流群**哟!
## 消息推送平台austin介绍
**核心功能**:统一的接口发送各种类型消息,对消息生命周期全链路追踪。
**意义**:只要公司内部有发送消息的需求,都应该要有类似`austin`的项目。消息推送平台对各类消息进行统一发送处理,这有利于对功能的收拢,以及提高业务需求开发的效率。
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c267ebb2ff234243b8665312dbb46310~tplv-k3u1fbpfcp-zoom-1.image)
## 使用姿势
**1**、创建需要发送的渠道账号
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1720f1e9c6b546a18b13a84fabe1f562~tplv-k3u1fbpfcp-zoom-1.image)
**2**、创建消息模板
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b387c53663d04796a20fda2d4ba925ac~tplv-k3u1fbpfcp-zoom-1.image)
**3**、测试发送消息是否正常
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e58637c9a00a482f91d1a84ab7a17c51~tplv-k3u1fbpfcp-zoom-1.image)
**4**、查看消息下发情况
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c2dd1369fa8a4f40abcbb5c02ed21893~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2b49be4a87f44621b5b916114b17bd28~tplv-k3u1fbpfcp-zoom-1.image)
**5**、亦可在新建模板时选择**定时任务**,通过上传[csv文件](https://www.yuque.com/office/yuque/0/2022/csv/1285871/1671865125068-b5385387-b4a4-41ac-a43e-bab54ee49d88.csv?from=https%3A%2F%2Fwww.yuque.com%2Fu1047901%2Fniffsu%2Fqqtese%2Fedit)和指定cron表达式实现下发消息
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/42ecf9c743bd4e3493e092d525cbffe7~tplv-k3u1fbpfcp-zoom-1.image)
## 部署姿势
austin项目**强依赖**`MySQL`/`Redis`/(**大概需要2G内存**)**弱依赖**`kafka`/`prometheus`/`graylog`/`flink`/`xxl-job`/`apollo`(**完全部署所有的服务大概8G+内存**)。如果缺少相关的组件可戳:[安装相关组件教程](INSTALL.md)。
> 实在想要`clone`项目后不用自己部署环境直接在**本地**启动`debug`,我这提供了[会员服务](https://mp.weixin.qq.com/s/4cOhNG5JBSvBkbSKTfw7eQ)**直连**部署好的服务器。
**1**、austin使用的MySQL版本**5.7x**。如果目前使用的MySQL版本8.0,注意改变`pom.xml`所依赖的版本
**2**、填写`application.properties`中`austin-database`对应的`ip/port/username/password`信息
**3**、执行`sql`文件夹下的`austin.sql`创建对应的表
**4**、填写`application.properties`中`austin.redis`对应的`ip`/`port`信息
**5**、以上配置信息都在`application.properties`文件中修改。(`prometheus`/`graylog`/`flink`/`xxl-job`/`apollo`/`kafka`可选)
**6**、**austin前端管理系统部署**,戳[GitHub](https://github.com/ZhongFuCheng3y/austin-admin)或[Gitee](https://gitee.com/zhongfucheng/austin-admin)跳转至对应的仓库
**7**、正常使用**数据管理**(查看实时数据链路下发)需要将`austin-stream`的`jar`包上传至`Flink`,根据[部署文档](INSTALL.md)启动Flink。在打`jar`包前需要填写`com.java3y.austin.stream.constants.AustinFlinkConstant`中的`redis`和`kafka`的`ip/port`注意日志的topic在`application.properties`中的`austin.business.log.topic.name`。如果没有该topic需要提前创建并**使用Kafka**作为消息队列实现)
**8**、正常使用**定时任务**需要部署`xxl-job`,根据[部署文档](INSTALL.md)启动xxl的调度中心并在`application.properteis`中填写 `austin.xxl.job.ip`和`austin.xxl.job.port`
**9**、正常使用**分布式日志采集**需要部署`graylog`,根据[部署文档](INSTALL.md)启动`graylog`,并在`application.properteis`中填写 `austin.grayLog.ip`
**10**、正常使用**系统监控**需要部署`promethus`和`grafana`,根据[部署文档](INSTALL.md)配置`grafana`图表。
**11**、正常使用**动态配置中心**需要部署`apollo`,根据[部署文档](INSTALL.md)启动`apollo`通过docker-compose启动需要在AustinApplication注入对应的ip和port(可看注释)。
## 会员服务
收费课程是以**项目**为主代码在Gitee和GitHub上都是开源的项目没有商业版后面也不会有。那么付费跟我自己去拉Git仓库拉代码下来看有什么区别
1、有很多人的自学能力和基础确实不太行不知道怎么开始学习从哪开始看起学习项目的过程中会走很多弯路很容易就迷茫了。付费最跟自学最主要的区别就是**我的服务会更周到**。
我会告诉你怎么开始学这个开源项目,哪些是重点需要掌握的,如何利用最短的时间把握整个系统架构和编码的设计,把时间节省下来去做其他事情。
2、一个生产环境的系统肯定会依赖各种中间件《消息推送平台-Austin》也是一样的。我专门买了两台服务器已经搭建好必要的依赖付费的可以**使用我的远程服务器**,在**本地就能直接启动运行体验和学习**
3、项目在编写的过程中也经历多次的重构迭代迭代的内容我是不会将以往文章内容重新修正发布但**语雀的文档**内容一定是**及时同步**,文档跟代码是保持一致的
4、干练清爽的项目commit可一步一步跟着commit还原整个系统的过程
5、除了项目还可以问我些学习经验、学习路线、简历编写、面试经验等等问题技术和学习上的知识**知无不言**
详情可以看戳:[我开通了付费渠道](https://mp.weixin.qq.com/s/4cOhNG5JBSvBkbSKTfw7eQ)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2d6dd728e9d4427ab6a47c647f4bdb78~tplv-k3u1fbpfcp-zoom-1.image)
## 项目交流
由于austin项目交流群已经超过了两百人添加我的**个人微信**备注:【**项目**】,我空的时候会拉进项目交流群里
<img align="center" src='https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/60efe6b0f4354b838244b96a15efdf49~tplv-k3u1fbpfcp-watermark.image' width=300px height=300px />
## 如何准备面试?
**对线面试官**公众号持续更新**面试系列**文章对线面试官系列深受各大开发的好评已有不少的同学通过对线面试官系列得到BATTMD等一线大厂的的offer。一个**讲人话的面试系列**,八股文不再是背诵。
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c4a6cae132244355b9da6bd74d38d1ee~tplv-k3u1fbpfcp-zoom-1.image)
想要获取这份电子书,**点击关注**下方公众号,回复「**对线**」得到我的联系方式即可进群获取电子书
<img align="center" src='https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f87f574e93964921a4d02146bf3ccdac~tplv-k3u1fbpfcp-zoom-1.image' width=300px height=300px />
## 里程碑
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7a5a59681a404ac1a9e92f651ba9a39c~tplv-k3u1fbpfcp-watermark.image?)
- [x] Maven+SpringBoot项目搭建
- [x] logback日志记录项目运行时信息引入common/guava/Hutool/Lombok/fastjson/OkHttp工具包
- [x] 接入腾讯云渠道发送一条短信
- [x] 使用SpringData JPA将短信发送记录存储至MySQL
- [x] 使用SpringBoot接入Kafka
- [x] 利用责任链完成对接入层的请求进行封装(责任链模式)
- [x] 消费层实现数据隔离(线程池:生产者与消费者模式)
- [x] 通用去重消息功能SpringBoot接入Redis并使用pipeline减少网络请求
- [x] 配置服务器和docker容器以及SpringBoot应用的监控prometheus+Grafana+auctuator
- [x] 接入分布式配置中心完成 丢失消息、白名单以及账号配置Apollo分布式配置中心
- [x] 邮件渠道接入
- [x] 日志链路数据追踪 + 注解式打印日志(优雅打印日志以及数据埋点)
- [x] 接入GrayLog分布式日志收集框架
- [x] 引入前端低代码平台AMIS搭建后台管理页面
- [x] 接入分布式定时任务框架定时发送任务xxl-job定时任务框架编写上传文件接口并使用LazyPending批处理人群文件数据
- [x] 接入实时流计算平台Flink实时日志数据根据用户维度和消息模板维度清洗至Redis
- [x] 通过AMIS低代码平台接入echarts图表展示实时聚合后的数据
- [x] 优雅停机、动态线程池参数配置
- [x] 企业微信渠道接入
- [x] 夜间屏蔽次日早晨推送xxl-job定时任务框架另类的延时队列
- [x] 钉钉渠道接入
- [x] 单机限流实现
- [x] 引入单测框架,编写部分单测用例
- [x] 接入微信服务号渠道(已有pull request代码待调试)
- [x] 接入微信小程序渠道(已有pull request代码)
- [x] 接入PUSH渠道
- [x] 接入云片短信渠道,并短信支持流量配置,拉取腾讯云短信回执
- [x] 完成接入钉钉机器人渠道所有类型的消息
- [x] 完成接入钉钉工作渠道所有类型的消息,包括对文件素材的上传功能
- [x] Kafka消息支持tag过滤
- [x] MQ层支持可插拔默认使用eventbus单机队列Kafka变为弱依赖
- [x] 渠道账号改为读取数据库,优化短信回执拉取功能
- [x] 接入微信服务号渠道(发送模板消息)完成
- [x] 接入微信小程序渠道(发送订阅消息)完成
- [x] 测试环境完成微信服务号扫码登录功能
- [x] 测试环境docker-compose完成接入MySQL/Redis/Flink/xxl-job/Kafka
- [x] 在线演示第一版发布
- [ ] 总体架构已完成,持续做基础建设和优化代码
**近期更新时间**12月29号
**近期更新功能**:完善企业微信(应用消息)和企业微信(机器人)所支持的消息类型,以及素材的上传