首页
学习
活动
专区
圈层
工具
发布

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_43126117/article/details/102911115

目录

广告系统架构图

一、eureka服务

二、zuul网关

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

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

统一响应(对象)示意图

统一响应示意图

统一异常(对象)示意图

通用索引表


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

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

spring cloud 架构图

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服务

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

maven坐标

代码语言:javascript
复制
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

配置文件

代码语言:javascript
复制
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/

启动类

代码语言:javascript
复制
@EnableEurekaServer                //启动eureka服务
@SpringBootApplication             //springboot引导
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

二、zuul网关

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

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

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

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

maven坐标

代码语言:javascript
复制
<!--
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>

配置文件

代码语言:javascript
复制
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启动与自定义过滤器(实现访问记录)示意图

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

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

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

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

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

统一响应(对象)示意图

统一响应示意图

统一异常(对象)示意图

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

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

通用索引表

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

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

下一篇
举报
领券