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

目录

广告系统架构图

一、eureka服务

二、zuul网关

zuul启动与自定义过滤器(实现访问记录)示意图

三、通用模块(统一响应与统一异常)

统一响应(对象)示意图

统一响应示意图

统一异常(对象)示意图

通用索引表


这不是一个完整的广告系统,主要涉及两方面  广告检索 、广告投放 ,这两个方面我感觉是最重要的,但是也使用Kafka的消息传递,为剩下的曝光见监测、 报表 、扣费 这三个部分留下了接口。

这一章,是为广告检索 、广告投放提前做的准备,主要实现eureka 服务注册与发现模块、统一响应模块 、zuul网关模块、系统监控模块。(不讲代码实现,下载代码自己看。

spring cloud 架构图

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

 

 spring cloud 架构实现计划---总体技术分层

基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)_第2张图片

当前项目所用到技术栈

JDK   、Kafka 、MySQL 

框架 SpringCloud: Finchley.RELEASE   、Spring  、Spring Data JPA 、Spring boot 

源码 : github https://github.com/yingyingqiqi/luoweiying-ad-spring-cloud/tree/master

一、eureka服务

基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)_第3张图片

一个单节点的eureka服务,为整个微服务提供服务注册与发现,尽量不要用单节点的,稳定性不够高,要是这个节点崩了,整个微服务就用不了,建议使用多节点。

maven坐标

        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        

配置文件

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网关

基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)_第4张图片

网关介绍:微服务系统中往往包含很多个功能不同的子系统或微服务,外部应用怎样去访问各种各样的微服务呢?这也是zuul所需要解决的主要问题。在微服务架构中, 后端服务往往不直接开放给调用端, 而是通过一个服务网关 根据请求的 url, 路由到相应的服务, 即实现请求转发。

微服务的网关功能,与我们所使用的路由器、硬件网关...等是有类是功能的,做路由转发、均衡负载、反向代理、动态路由等等。

在此项目中,我们使用路由转发 和 ZuulFilter自定义过滤器(实现访问记录)。

补充:Zuul是奈菲提供的,ZuulFilter这个类没有使用servlet.Filter。

maven坐标



    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client



    org.springframework.cloud
    spring-cloud-starter-netflix-zuul

配置文件

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

zuul启动与自定义过滤器(实现访问记录)示意图

基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)_第5张图片

自定义过滤器(实现访问记录),继承ZuulFilter类:

  • 1.实现过滤器 路由前后顺序、
  •  2.此过滤器选择路由后的执行顺序 、
  • 3.此过滤器是否执行、
  • 4.要执行的方法 这里用到(RequestContext.getCurrentContext),保存访问开始信息。

三、通用模块(统一响应与统一异常)

为什么要做这个模块,响应与异常处理,每个微服务大都需要的,要是每个服务都使用一份独特的,这样特别不利于维护。

  • 通用的代码,配置不应该散落在各个微服务模块,不利于维护。
  • 统一的响应,一个大的系统,响应对象需要一层统一的封装。
  • 统一的异常处理,不直接展示错误,对用户友好 ; 异常分类,便于排查问题,debug ; 降低业务代码中对异常处理的耦合。

统一响应(对象)示意图

基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)_第6张图片

统一响应示意图

基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)_第7张图片

统一异常(对象)示意图

基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)_第8张图片

统一的响应与统一异常处理总结:

  • 1.用了Spring MVC ControllerAdvice的拦截器 ResponseBodyAdvice接口、 @ExceptionHandler注解。
  • 2.实现Webconfigurer接口的configureMessageconverters方法,清空所有转换器,只添加MappingJackson2HttpMessageConverter转换器
  • 3.详细的介绍 点击 Spring MVC ControllerAdvice深入解析

通用索引表

基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)_第9张图片

这些索引表,是为了各个服务调用时,作为传递对象使用,使用频率很高,所有也放在通用模块。

上面三个部分是这个广告投放项目的准备工作,后面的部分比较难,我通过两章来进一部介绍。

你可能感兴趣的:(学习总结,SpringBoot,完整项目)