前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于 SpringCloud 微服务架构的广告系统(第一部分:eureka、zuul、通用模块)

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

作者头像
营琪
发布2019-11-12 19:00:58
6170
发布2019-11-12 19:00:58
举报
文章被收录于专栏:营琪的小记录营琪的小记录

版权声明:本文为博主原创文章,遵循 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坐标

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

网关介绍:微服务系统中往往包含很多个功能不同的子系统或微服务,外部应用怎样去访问各种各样的微服务呢?这也是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

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

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

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

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

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

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

统一响应(对象)示意图

统一响应示意图

统一异常(对象)示意图

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

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

通用索引表

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • spring cloud 架构图
  • 一、eureka服务
  • 二、zuul网关
    • zuul启动与自定义过滤器(实现访问记录)示意图
    • 三、通用模块(统一响应与统一异常)
      • 统一响应(对象)示意图
        • 统一响应示意图
          • 统一异常(对象)示意图
            • 通用索引表
            相关产品与服务
            云数据库 MySQL
            腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档