广告系统设计 java_《基于SpringCloud微服务架构广告系统设计与实现》笔记
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微服务架构广告系统设计与实现》笔记相关推荐
- 基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)
目录 广告系统架构图 一.eureka服务 二.zuul网关 zuul启动与自定义过滤器(实现访问记录)示意图 三.通用模块(统一响应与统一异常) 统一响应(对象)示意图 统一响应示意图 统一异常(对 ...
- 基于SpringCloud微服务架构的直播平台的设计与实现(前端小程序+后端Java IDEA) 文档+项目源码
摘 要 本文的主题是设计与实现一个基于 SpringCloud+Golang 微服务框架的分布式直播平台,主要聚焦于短视频与直播流媒体服务.系统由服务端,后台管理端和微信小程序端三部分组成,推拉直播流 ...
- 基于SpringCloud微服务架构的直播平台的设计与实现
摘 要 本文的主题是设计与实现一个基于 SpringCloud+Golang 微服务框架的分布式直播平台,主要聚焦于短视频与直播流媒体服务.系统由服务端,后台管理端和微信小程序端三部分组成,推拉直播流 ...
- 微服务框架 SpringCloud微服务架构 25 黑马旅游案例 25.4 广告置顶
微服务框架 [SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务] SpringCloud微服务 ...
- 计算机毕业设计springcloud“微服务”架构下新闻头条的设计与实现
最新计算机专业原创毕业设计参考选题都有源码+数据库是近期作品 你的选题刚好在下面有,有时间看到机会给您发 1 ssm毕业生实习管理系统 2 ssm基于vue.js开发的红酒网站 3 springboo ...
- SpringCloud微服务架构实战库存管理与分布式文件系统
库存管理与分布式文件系统 在电商平台的库存管理系统设计中,将涉及商品和本地图库的管理,这里我们将使用另一种数据开发框架 MyBatis进行数据库访问方面的设计,还将实现与分布式文件系统的对接使用. 本 ...
- 主流SpringCloud微服务架构,您可少走弯路
背景 时间回到2017年底,那会儿SpringCloud正处于如火如荼的状态,加上与K8s的完美契合,整个互联网公司也想借着这波热度做一次真真正正转型,但真正能落地有经验的人少之甚少,大部分公司还是摸 ...
- SpringCloud 微服务架构,适合接私活(附源码)
欢迎关注方志朋的博客,回复"666"获面试宝典 今天给大家推荐一个牛逼的接私活项目,SpringCloud微服务架构项目! 一个由商业级项目升级优化而来的微服务架构,采用Sprin ...
- SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用
什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...
最新文章
- C++ union 使用总结
- TEXTMETRIC 结构详解
- while(1); 作用
- SpringMVC解决前台传入的数组或集合类型数据
- 【Vue】路由Router嵌套的实现及经典案例
- 如何在有道云笔记的Markdown上上传本地图片(亲测好用,而且不用开会员)
- 一作解读NLPCC最佳学生论文:1200万中文对话数据和预训练模型CDial-GPT
- android brvah 分组,RecyclerView使用BRVAH完成分组布局效果
- git通过http的方式下载和提交代码
- Linux的web视频服务器的构建 (chinaitlab)
- 国内自动化测试软件,AutoRunner-国内测试行业专业自动化测试工具成长史
- Wechall Challenges Writeup 知识拓展
- python设置随机绘图颜色_Python绘图的颜色设置
- 各种短视频极速版如何实现自动看视频赚钱
- 关于Win10的powerdesigner16的缩放问题,字体和图标
- fla文件中切记不能使用TLF文本
- 员工成长的能力与技能是企业的资产还是负债?这个问题怎么解决?
- Python 完美诠释“高内聚“概念的 IO 流 API 体系结构
- Codeforces Round #702 (Div. 3)——B
- php云盘实现上传下载,文件上传功能-PHP通过数据库实现在线网盘管理文件上传下载-PHP中文网教程...