1-1 课程导学

什么是广告系统?

2-1 广告系统概览

2-2 广告系统架构

2-3 准备工作与系统目录结构

2-3 准备工作与系统目录结构

第3章 广告系统骨架开发

3-1 Maven基础知识

3-2 Maven 相关特性

3-3 广告系统主工程

...建立项目结构...

Maven有三种类型的仓库:

本地仓库:工程里依赖的jar包,maven会主动下载到本地目录的.m2。

中央仓库:由maven社区提供,包含有大量的常用库。

远程仓库:对开发者提供的,开发者把自己编写的包放在这个仓库,工程就可以指定远程仓库去下载。

3-4 单节点 Eureka Server 的开发

3-5 Eureka Server 的部署

分别启动单节点和多节点的Eureka Server

单节点配置文件:

多节点(三个节点的Eureka server):

由于父工程会管理所有子工程,因此在父工程打包:

启动第一个服务:

类似的,分别启动server2和3。

3-6 微服务架构及网关组件介绍

三种类型的过滤器可以分别用来实现不同的功能。

Pre filters:请求被路由之前调用,可以利用这种过滤器实现身份认证、在集群中选择请求的微服务记录调试信息等等。

Routing filters:这种过滤器将请求路由到微服务,即用于构造发送给微服务的请求。使用Apache的HttpClient或者Netflix的Ribbon请求微服务。

Post filters:这种过滤器在路由到微服务以后执行,可以为响应添加Http的header、收集统计信息和指标、将响应从微服务发送给客户端等等。

Error filters:当请求发生了错误去执行的过滤器。

Custom filters:自定义的过滤器。例如我们可以定义一种静态类型的过滤器,直接在Zuul中响应,而不在微服务中响应。如果请求的是一个静态文件,可以不需要经过路由到微服务,直接在Custom filters返回给客户端。

3-7 网关启动程序的开发

3-8 自定义网关过滤器的开发

实现两个自定义过滤器完成一个访问日志的功能。

PreRequestFilter.java

import com.netflix.zuul.ZuulFilter;

import com.netflix.zuul.context.RequestContext;

import com.netflix.zuul.exception.ZuulException;

import lombok.extern.slf4j.Slf4j;

import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;

import org.springframework.stereotype.Component;

@Slf4j

@Componentpublic class PreRequestFilter extendsZuulFilter {

@OverridepublicString filterType() {returnFilterConstants.PRE_TYPE;

}

@Overridepublic intfilterOrder() {return 0;

}

@Overridepublic booleanshouldFilter() {return true;

}

@Overridepublic Object run() throwsZuulException {

RequestContext ctx=RequestContext.getCurrentContext();

ctx.set("startTime", System.currentTimeMillis());return null;

}

}

AccessLogFilter.java

importcom.netflix.zuul.ZuulFilter;importcom.netflix.zuul.context.RequestContext;importcom.netflix.zuul.exception.ZuulException;importlombok.extern.slf4j.Slf4j;importorg.springframework.cloud.netflix.zuul.filters.support.FilterConstants;importorg.springframework.stereotype.Component;importjavax.servlet.http.HttpServletRequest;

@Slf4j

@Componentpublic class AccessLogFilter extendsZuulFilter {

@OverridepublicString filterType() {returnFilterConstants.POST_TYPE;

}

@Overridepublic intfilterOrder() {return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 1;

}

@Overridepublic booleanshouldFilter() {return true;

}

@Overridepublic Object run() throwsZuulException {

RequestContext context=RequestContext.getCurrentContext();

HttpServletRequest request=context.getRequest();

Long startTime= (Long) context.get("startTime");

String uri=request.getRequestURI();long duration = System.currentTimeMillis() -startTime;

log.info("uri: " + uri + ", duration: " + duration / 100 + "ms");return null;

}

}

第4章 微服务通用模块开发

4-1 关于通用模块功能的介绍

4-2 统一响应处理的开发

CommonResponseDataAdvice.java

importcom.imooc.ad.annotation.IgnoreResponseAdvice;importcom.imooc.ad.vo.CommonResponse;importorg.springframework.core.MethodParameter;importorg.springframework.http.MediaType;importorg.springframework.http.converter.HttpMessageConverter;importorg.springframework.http.server.ServerHttpRequest;importorg.springframework.http.server.ServerHttpResponse;importorg.springframework.lang.Nullable;importorg.springframework.web.bind.annotation.RestControllerAdvice;importorg.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

@RestControllerAdvicepublic class CommonResponseDataAdvice implements ResponseBodyAdvice{

@Override

@SuppressWarnings("all")public booleansupports(MethodParameter methodParameter,

Class extends HttpMessageConverter>>aClass) {if(methodParameter.getDeclaringClass().isAnnotationPresent(

IgnoreResponseAdvice.class)) {return false;

}if(methodParameter.getMethod().isAnnotationPresent(

IgnoreResponseAdvice.class)) {return false;

}return true;

}

@Nullable

@Override

@SuppressWarnings("all")publicObject beforeBodyWrite(@Nullable Object o,

MethodParameter methodParameter,

MediaType mediaType,

Class extends HttpMessageConverter>>aClass,

ServerHttpRequest serverHttpRequest,

ServerHttpResponse serverHttpResponse) {

CommonResponse response = new CommonResponse<>(0, "");if (null ==o) {returnresponse;

}else if (o instanceofCommonResponse) {

response= (CommonResponse) o;

}else{

response.setData(o);

}returnresponse;

}

}

4-3 统一异常处理的开发

自定义AdException类。

GlobalExceptionAdvice.java

importcom.imooc.ad.exception.AdException;importcom.imooc.ad.vo.CommonResponse;importorg.springframework.web.bind.annotation.ExceptionHandler;importorg.springframework.web.bind.annotation.RestControllerAdvice;importjavax.servlet.http.HttpServletRequest;

@RestControllerAdvicepublic classGlobalExceptionAdvice {

@ExceptionHandler(value= AdException.class)public CommonResponsehandlerAdException(HttpServletRequest req,

AdException ex) {

CommonResponse response = new CommonResponse<>(-1,"business error");

response.setData(ex.getMessage());returnresponse;

}

}

4-4 统一配置的开发

定义http消息转换器(将Java对象转换为http的输出流)。

WebConfiguration.java

importorg.springframework.context.annotation.Configuration;importorg.springframework.http.converter.HttpMessageConverter;importorg.springframework.http.converter.json.MappingJackson2HttpMessageConverter;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;importjava.util.List;

@Configurationpublic class WebConfiguration implementsWebMvcConfigurer {

@Overridepublic void configureMessageConverters(List>converters) {

converters.clear();

converters.add(newMappingJackson2HttpMessageConverter());

}

}

第5章 广告投放系统的开发

5-1 Spring IOC和MVC基础知识

5-2 SpringBoot 常用功能特性介绍

启动的方法还有两种:

定时任务:

5-3 广告投放系统数据表设计

第7章 广告检索系统 - 广告数据索引的设计与实现

7-1 广告数据索引设计介绍

7-2 广告数据索引维护介绍

7-3 推广计划索引对象定义与服务实现

IndexAware.java

packagecom.imooc.ad.index;public interface IndexAware{

V get(K key);voidadd(K key, V value);voidupdate(K key, V value);voiddelete(K key, V value);

}

索引对象 AdPlanObject.java

packagecom.imooc.ad.index.adplan;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importjava.util.Date;

@Data

@NoArgsConstructor

@AllArgsConstructorpublic classAdPlanObject {privateLong planId;privateLong userId;privateInteger planStatus;privateDate startDate;privateDate endDate;public voidupdate(AdPlanObject newObject) {if (null !=newObject.getPlanId()) {this.planId =newObject.getPlanId();

}if (null !=newObject.getUserId()) {this.userId =newObject.getUserId();

}if (null !=newObject.getPlanStatus()) {this.planStatus =newObject.getPlanStatus();

}if (null !=newObject.getStartDate()) {this.startDate =newObject.getStartDate();

}if (null !=newObject.getEndDate()) {this.endDate =newObject.getEndDate();

}

}

}

广告系统设计 java_《基于SpringCloud微服务架构广告系统设计与实现》笔记相关推荐

  1. 基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)

    目录 广告系统架构图 一.eureka服务 二.zuul网关 zuul启动与自定义过滤器(实现访问记录)示意图 三.通用模块(统一响应与统一异常) 统一响应(对象)示意图 统一响应示意图 统一异常(对 ...

  2. 基于SpringCloud微服务架构的直播平台的设计与实现(前端小程序+后端Java IDEA) 文档+项目源码

    摘 要 本文的主题是设计与实现一个基于 SpringCloud+Golang 微服务框架的分布式直播平台,主要聚焦于短视频与直播流媒体服务.系统由服务端,后台管理端和微信小程序端三部分组成,推拉直播流 ...

  3. 基于SpringCloud微服务架构的直播平台的设计与实现

    摘 要 本文的主题是设计与实现一个基于 SpringCloud+Golang 微服务框架的分布式直播平台,主要聚焦于短视频与直播流媒体服务.系统由服务端,后台管理端和微信小程序端三部分组成,推拉直播流 ...

  4. 微服务框架 SpringCloud微服务架构 25 黑马旅游案例 25.4 广告置顶

    微服务框架 [SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务] SpringCloud微服务 ...

  5. 计算机毕业设计springcloud“微服务”架构下新闻头条的设计与实现

    最新计算机专业原创毕业设计参考选题都有源码+数据库是近期作品 你的选题刚好在下面有,有时间看到机会给您发 1 ssm毕业生实习管理系统 2 ssm基于vue.js开发的红酒网站 3 springboo ...

  6. SpringCloud微服务架构实战库存管理与分布式文件系统

    库存管理与分布式文件系统 在电商平台的库存管理系统设计中,将涉及商品和本地图库的管理,这里我们将使用另一种数据开发框架 MyBatis进行数据库访问方面的设计,还将实现与分布式文件系统的对接使用. 本 ...

  7. 主流SpringCloud微服务架构,您可少走弯路

    背景 时间回到2017年底,那会儿SpringCloud正处于如火如荼的状态,加上与K8s的完美契合,整个互联网公司也想借着这波热度做一次真真正正转型,但真正能落地有经验的人少之甚少,大部分公司还是摸 ...

  8. SpringCloud 微服务架构,适合接私活(附源码)

    欢迎关注方志朋的博客,回复"666"获面试宝典 今天给大家推荐一个牛逼的接私活项目,SpringCloud微服务架构项目! 一个由商业级项目升级优化而来的微服务架构,采用Sprin ...

  9. SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用

    什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...

最新文章

  1. C++ union 使用总结
  2. TEXTMETRIC 结构详解
  3. while(1); 作用
  4. SpringMVC解决前台传入的数组或集合类型数据
  5. 【Vue】路由Router嵌套的实现及经典案例
  6. 如何在有道云笔记的Markdown上上传本地图片(亲测好用,而且不用开会员)
  7. 一作解读NLPCC最佳学生论文:1200万中文对话数据和预训练模型CDial-GPT
  8. android brvah 分组,RecyclerView使用BRVAH完成分组布局效果
  9. git通过http的方式下载和提交代码
  10. Linux的web视频服务器的构建 (chinaitlab)
  11. 国内自动化测试软件,AutoRunner-国内测试行业专业自动化测试工具成长史
  12. Wechall Challenges Writeup 知识拓展
  13. python设置随机绘图颜色_Python绘图的颜色设置
  14. 各种短视频极速版如何实现自动看视频赚钱
  15. 关于Win10的powerdesigner16的缩放问题,字体和图标
  16. fla文件中切记不能使用TLF文本
  17. 员工成长的能力与技能是企业的资产还是负债?这个问题怎么解决?
  18. Python 完美诠释“高内聚“概念的 IO 流 API 体系结构
  19. Codeforces Round #702 (Div. 3)——B
  20. php云盘实现上传下载,文件上传功能-PHP通过数据库实现在线网盘管理文件上传下载-PHP中文网教程...

热门文章

  1. beyondcompare密钥过期解决
  2. Office2007集成SP1光盘镜像下载(简体中文专业版+企业版VOL)
  3. 小程序直播如何接入抖音直播
  4. 公司网络出现卡顿或断网如何处理?
  5. 侠客精神 与 程序员的梦想
  6. 成长性因子选股(1)
  7. Hadoop 三节点集群搭建
  8. C专家编程 —— C语言的前世今生
  9. 阿里巴巴集团副总裁车品觉:大数据走向平民化
  10. 基于PyQt5实现第二界面或弹出界面(子窗口)