版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43126117/article/details/102911115
目录
广告系统架构图
一、eureka服务
二、zuul网关
zuul启动与自定义过滤器(实现访问记录)示意图
三、通用模块(统一响应与统一异常)
统一响应(对象)示意图
统一响应示意图
统一异常(对象)示意图
通用索引表
这不是一个完整的广告系统,主要涉及两方面 广告检索 、广告投放 ,这两个方面我感觉是最重要的,但是也使用Kafka的消息传递,为剩下的曝光见监测、 报表 、扣费 这三个部分留下了接口。
这一章,是为广告检索 、广告投放提前做的准备,主要实现eureka 服务注册与发现模块、统一响应模块 、zuul网关模块、系统监控模块。(不讲代码实现,下载代码自己看。)
spring cloud 架构实现计划---总体技术分层
当前项目所用到技术栈
JDK 、Kafka 、MySQL
框架 SpringCloud: Finchley.RELEASE 、Spring 、Spring Data JPA 、Spring boot
源码 : github https://github.com/yingyingqiqi/luoweiying-ad-spring-cloud/tree/master
一个单节点的eureka服务,为整个微服务提供服务注册与发现,尽量不要用单节点的,稳定性不够高,要是这个节点崩了,整个微服务就用不了,建议使用多节点。
maven坐标
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
配置文件
spring:
application:
name: ad-eureka
server:
port: 8000
eureka:
instance:
hostname: localhost
client:
# 是否获取注册信息,单节点 是否向eureka注册
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动类
@EnableEurekaServer //启动eureka服务
@SpringBootApplication //springboot引导
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
网关介绍:微服务系统中往往包含很多个功能不同的子系统或微服务,外部应用怎样去访问各种各样的微服务呢?这也是zuul所需要解决的主要问题。在微服务架构中, 后端服务往往不直接开放给调用端, 而是通过一个服务网关 根据请求的 url, 路由到相应的服务, 即实现请求转发。
微服务的网关功能,与我们所使用的路由器、硬件网关...等是有类是功能的,做路由转发、均衡负载、反向代理、动态路由等等。
在此项目中,我们使用路由转发 和 ZuulFilter自定义过滤器(实现访问记录)。
补充:Zuul是奈菲提供的,ZuulFilter这个类没有使用servlet.Filter。
maven坐标
<!--
Eureka 客户端, 客户端向 Eureka Server 注册的时候会提供一系列的元数据信息, 例如: 主机, 端口, 健康检查url等
Eureka Server 接受每个客户端发送的心跳信息, 如果在某个配置的超时时间内未接收到心跳信息, 实例会被从注册列表中移除
-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 服务网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
配置文件
spring:
application:
name: ad-gateway
server:
port: 9000
#向eureka注册
eureka:
client:
service-url:
defaultZone: http://localhost:8000/eureka/
#网关配置
zuul:
prefix: /ad
routes:
ad-sponsor:
path: /ad-sponsor/**
serviceId: eureka-client-ad-sponsor
strip-prifix: true
# 转发的时候保留前缀 如 ip:8000/ad/ad-sponsor/craete/adPlan 转发:/ad-sponsro/create/adPlan
ad-search:
path: /ad-search/**
serviceId: eureka-client-ad-search
strip-prifix: true
自定义过滤器(实现访问记录),继承ZuulFilter类:
为什么要做这个模块,响应与异常处理,每个微服务大都需要的,要是每个服务都使用一份独特的,这样特别不利于维护。
统一的响应与统一异常处理总结:
这些索引表,是为了各个服务调用时,作为传递对象使用,使用频率很高,所有也放在通用模块。
上面三个部分是这个广告投放项目的准备工作,后面的部分比较难,我通过两章来进一部介绍。