一、系统架构

二、准备工作
1、开发工具:IDEA
2、数据库:MySQL
3、环境:JDK1.8、 Maven 3
4、系统目录结构

三、广告系统的功能
1、广告投放系统 -> 既然是广告系统,一定得有广告数据,数据当然是由广告主或代理商投放,那么,也就需要有个投放广告的平台,这就是广告投放系统
2、广告检索系统 -> 媒体方对广告系统发起请求,广告系统能够检索符合要求的广告数据,这就是广告检索系统的核心功能
3、曝光监测系统 -> 监测广告数据的曝光记录
4、报表系统 -> 构建广告数据报表,比如广告A在地域B中一共曝光了多少次,主要是 OLAP 的过程
5、扣费系统 -> 广告的每一次曝光都是需要扣费的,且这个系统里面负责了将广告数据置位的功能
四、Maven基础
1、Maven 通过坐标去仓库获得对应的资源

2、maven常用的命令


3、相关特性




五、Eureka-服务注册(Serveice Registry)与发现(Service Discovery)
1、Eureka由Eureka Server和Eureka Client组成
2、Eureka Server:提供服务的注册与发现
(1)、模块目录

3、Eureka Client :将服务注册到Eureka Service和从Eureka Service中获取服务
主要有Service Provider 和Service Consumer组成
六、网关-zuul
1、API-网关:业务接口通过API网关暴露,是所有客户端接口的唯一入口地址。微服务之间的通信也通过API网关

2、zuul的生命周期

pre:在请求被路由之前调用
route:在路由请求时被调用
post:在返回请求时被调用
error:处理请求时发生错误时调用
3、zuul的功能大部分都是由过滤器实现的(示例代码)
@Slf4j
@Component
/*** 通过实现ZuulFilter实现*/
public class PreRequestFilter extends ZuulFilter {/**** @return 返回过滤器的类型 pre、post、error、route*/@Overridepublic String filterType() {return FilterConstants.PRE_TYPE;}/*** 定义同一类型过滤器的执行顺序,值越小则优先级越高* @return 返回过滤器的优先级*/@Overridepublic int filterOrder() {return 0;}/*** 可以通过逻辑条件判断,选择过滤器是否执行* @return 返回过滤器是否需要执行*/@Overridepublic boolean shouldFilter() {return true;}/*** 定义过滤器具体执行的操作* @return* @throws ZuulException*/@Overridepublic Object run() throws ZuulException {RequestContext ctx=RequestContext.getCurrentContext();ctx.set("startTime",System.currentTimeMillis());return null;}
}
六、广告系统业务部分
(一)、通用模块设计
1、设计思想
-
通用的代码、配置不应该散落在各个业务模块中,不利于维护与更新
-
一个大的系统,响应对象需要统一外层格式
-
各种业务设计与实现,可能会抛出各种各样的异常,异常信息的收集也应该做到统一
2、通用模块主要包含统一配置开发、统一响应处理、统一异常处理
统一配置开发:主要是通用代码定义和配置定义
统一响应处理:方便前端解析
统一异常处理:对异常分类,便于排查问题,Debug;降低代码中对异常处理的耦合















