现在Austin的文档我觉得还是比较全的,但到了看代码的时候,可能有的同学就不知道应该怎么看,有想知道模块之间的调用链路,有想一点一点把细节给全看了。这时候就很可能在项目里犯迷糊了,绕不出不来了。

Java开源项目消息推送平台推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型

我工作了几年,也接手过很多新的业务,这里聊聊我的经验。

1、在看代码之前,先整体认识下当前的系统,到底是干什么的。由几个模块组成,上下游的关系是怎么样的。

这个对于Austin来说就很简单啦,就发送消息。核心就是由接入层->MQ->消费逻辑层给组成,另外提供一个后台管理以及一个流处理模块

工程模块 作用
austin-common 项目公共包:存储着项目公共常量/枚举/Bean
austin-support 项目工具包:对接中间件/组件
austin-cron 定时任务模块:对xxl-job封装和项目定时任务逻辑
austin-web 后台管理模块:提供接口给前端调用
austin-service-api 消息接入层接口定义模块:只有接口和必要的入参依赖
austin-service-api-impl 消息接入层具体实现模块:真实处理请求
austin-handler 消息处理逻辑层:消费MQ下发消息
austin-stream 实时处理模块:利用flink实时处理下发链路数据
austin-data-house 数据仓库模块:消费MQ数据写入hive

2、了解了当前系统之后,这时候把代码给下载到本地,看看有没有办法在本地运行,或者在测试环境中远程debug。这一步就是为了能让自己真实体验下功能,试着追下整体逻辑(不用细看)。

这块Austin也好办,因为在本地就可以起来,发消息本地也是正常发送的。就从接入层的发送接口开始,一步一步的bug,方法我这边基本都会有注释,有“难懂”的代码应该都有文档告诉你当时我是怎么设计的。

这时候不用去看很细的内容,比如某个字段是怎么拼接的,比如我做去重功能的时候key是什么,value是什么。反正先大体把每一个方法给过一遍,知道会有这些处理,最后就发送了一条消息。

3、整体逻辑过完了以后,再次回到架构图或者功能图,看看是不是又理解些了。这时候就应该不会感到抽象,应该已经又进一步明白了系统的整体功能了,甚至了解到了写代码的人的风格。

4、继续debug!看细节!探索为什么要这样设计代码,如果是你写有没有更好的写法,或者现有这写法有没有值得吐槽的。

这时候就得看一些你疑惑的细节功能是怎么实现的,比如之前可能不知道去重在redis 是怎么实现的,这时候就看看key是什么,value是什么。可能不知道数据隔离是怎么实现的,原来现在用的是SpringBoot Kafka 新版本提供的特性(在创建kafka容器前就可以动态去更改groupId)。比如为什么我要在这一步打上日志,看看发送消息时,打印的日志是哪些,这条日志打下来是干什么的。

接触一个新的项目,永远都是:先看大纲->再看细节,有debug条件是最好的,配合日志看看处理链路。

如果想学Java项目的,强烈推荐我的项目消息推送平台Austin(8K stars),可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。消息推送平台推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。

最近有在不同的地方看到了我的开源项目austin,每次都能让我窃喜一番。以至于给我感觉很有戏,或许能成为网红项目。

austin消息推送平台从零开写更新了一年多,Gitee 4.9k+stars,GitHub 4k+ stars,能达到这成果,一方面是我孜孜不倦地运营,另一方面是有不少看过这个项目的小伙伴在默默地帮我推荐

我从来没有跟别的博主主动推荐过我的项目,让他们帮忙宣传宣传。这个是可以做到的,但我没去这样做。

austin目前跟谷粒商城/瑞吉外卖/淘淘商城这种Java网红项目在知名度上还没法比,还远着。现在应该还不会有面试官看完简历知道是austin,也应该不会被提到:你们项目组挺大啊

austin跟商城/外卖这种项目不一样的是:只要有点规模的公司,都会有消息推送平台这种系统,不会受到公司具体业务的影响。

至于有很多人会提到这系统能不能写在简历上,它离生产环境的项目还有多远,是不是只是一个学习项目

1,这系统能写在简历上,我两年前写的就是它,能用作面试,也通过了面试。我这也有股东在校招通过它拿了大厂的offer的。

2,不要觉得生产环境的项目有多牛逼,这项目是能上生产环境的,也已经有人在线上部署了。我相信肯定不止一个,我看Git的fork记录也有其他公司的,要是你也部署了,还劳烦在Git填一下

3,这系统适合学习,主要是它的业务不复杂,但可玩性还是挺高的(看我列举了一堆的技术栈就知道了)

如果想学Java项目的,强烈推荐我的项目消息推送平台Austin(8K stars),可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。消息推送平台推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。

如何吃透一个Java项目?的更多相关文章

  1. 初学者如何吃透一个Java项目

    不少初学者朋友在学习Java过程中,会对着视频敲Java项目,其中遇到的BUG还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂 这些朋友应该怎样才能掌握一个项目所用 ...

  2. 在Eclipse中,如何把一个java项目变成web项目

    经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目.解决步骤:1.进入项目目录,可看到.project文件,打开.2.找到<natures>... ...

  3. java学习笔记(一):开始第一个java项目

    这里使用IntelliJ IDEA 来新建第一个java项目 在新建项目向导,你可以选择你的项目支持的技术,你正在做一个普通的Java项目,只需单击下一步. 下一步,新建一个test的项目. 新建一个 ...

  4. 【系列教程1】Gradle入门系列二:第一个Java项目

    这篇教程的主要内容是讲解如何用Gradle编译和打包一个简单的Java项目. 该Java项目只有一个需求:我们的构建脚本必须创建一个可执行的Jar文件,换句话说,我们必须能够使用命令java -jar ...

  5. 作为Java新手,如何才能快速的看透一个Java项目?

    前言 技术学习是一个总结.纠错.触类旁通的过程,而不是单纯重复练习的过程,如果你问一个做过5年以上Java的老码农,他们很多人都会有很强的"搬砖感",这种"搬砖感&quo ...

  6. [IntelliJ IDEA入门] 新建一个Java项目

    新建一个Project 是否有JDK配置 选择JavaEE 点击Next 项目路径和文件 .idea (directory based) 创建项目的时候自动创建一个 .idea 的项目配置目录来保存项 ...

  7. Gradle入门(3):构建第一个Java项目

    Gradle插件通过引入特定领域的约定和任务来构建你的项目.Java插件是Gradle自身装载的一个插件.Java插件提供的基本功能远比源代码编译和打包多.它为你的项目建立了一个标准的项目布局,并确保 ...

  8. JetBrains Fleet初体验,如何运行一个java项目

    序言 各位好啊,我是会编程的蜗牛,JetBrains 日前宣布其打造的下一代 IDE Fleet 正式推出公共预览版,现已开放下载.作为java开发者,对于JetBrains开发的全家桶可以说是印象深 ...

  9. 如何创建一个Java项目

    目录 新建项目 项目信息配置 创建Java类 编译和运行 新建项目 首先双击eclipse进入到eclipse页面. 菜单"File"下的"New"里" ...

  10. 一个Java项目的学习

    1. java命令行的启动 首先是gradle build 其次是:java -Dabc.appid=1234 -classpath "a.jar:b.jar"  com.ctri ...

随机推荐

  1. 机器学习基础04DAY

    scikit-learn数据集 我们将介绍sklearn中的数据集类,模块包括用于加载数据集的实用程序,包括加载和获取流行参考数据集的方法.它还具有一些人工数据生成器. sklearn.dataset ...

  2. JMM知识点总结

    JMM知识点总结 一.什么是JMM? 不知道大家在学习的过程有没有思考过这两个问题 为什么说java是跨平台语言 导致并发问题的原因是什么 第一个问题,我是这么理解的,代码运行本质上是将我们写的语言转 ...

  3. 聊聊Spring扩展点BeanPostProcessor和BeanFactoryPostProcessor

    介绍 今天聊一聊spring中很重要的两个扩展点BeanPostProcessor和BeanFactoryPostProcessor,spring之所以如次强大,是因为它提供了丰富的功能给我们使用,但 ...

  4. Nmap基本使用【速查版】

    列举远程机器开放的端口 nmap [域名] 列举远程机器开放的端口和服务 nmap --dns-servers 8.8.8.8 [域名] nmap进行探测之前要把域名通过DNS服务器解析为IP地址,我 ...

  5. flask-wtfwkfom使用

    我们在使用flask框架来搭建自己的博客,只要是设涉及到表单相关,必然会想起Flask-WTF与WTForms.对于flask初学者来说,比较容易混淆两者.今天想来一一解释两者的用法. Flask-W ...

  6. pandas这dataframe结构

    认识DataFrame结构 DataFrame 一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以 ...

  7. [架构]辨析: 高可用 | 集群 | 主从 | 负载均衡 | 反向代理 | 中间件 | 微服务 | 容器 | 云原生 | DevOps | ...

    词汇集 灾备 冷备份 双机热备份 异地容灾备份 云备份 灾难演练 磁盘阵列(RAID) 故障切换 心跳监测 高可用 集群 主从复制(Master-Slave) 多集群横向扩容(master-clust ...

  8. Linux(五)用户管理与文件权限

    1 常用的基本命令 Shell可以看作一个命令解释器,为我们提供一个交互式的文本控制台界面,可以通过终端控制台来输入命令,由shell进行解释并最终交给linux内核运行.可以看作用户和硬件的桥梁. ...

  9. C盘爆满的解决方法,不用删除文件,使用分区助手无损增加内存

    一.分区助手傲梅科技 对于我们C盘内存不足的来说,老师推荐的yyds. 我的内存C盘历史最低是900多M,1.5G还是多的,经过我不断的删除文件,发现没什么用,电脑用久了C盘文件占内存自然就多了!!改 ...

  10. 关于Validation的方法使用

    acceptance验证 acceptance 是 Rails 中的一个验证器(validator),用于验证一个布尔类型的属性是否被接受.在表单中,通常会有一些复选框或单选按钮,用户需要勾选或选择才 ...