基于SpringCloud的广告系统设计与实现(一)

news2025/1/18 16:15:34

一、广告系统概论

 

 广告系统中计费方式:CPM 千次广告展现收费/CPT 按时间段/CPC用户点击类广告收费。

 

Mysql:进行广告数据的存储,以及检索系统监听Mysql做增量索引

Kafka:实现各微服务之间的通信

比如地域维度,时间维度

 

 二、微服务架构

 

三、Eureka

1 介绍


核心功能
Service Registry(服务注册)
Service Discovery(服务发现)
基本架构
Eureka 由三个角色组成:
Eureka Server,提供服务注册与发现
Service Provider,服务提供方,将自身服务注册到 Eureka Server上,从而让 Eureka Server 持有服务的元信息,让其他的服务消费方能够找到当前服务Service Consumer,服务消费方,从Eureka Server上获取注册服务列表,从而能够消费服务Service Provider/Consumer 相对于Server,都叫做 Eureka Client

架构图

2  Eureka Server

单机版application.yml:

spring:
  application:
    name: ad-eureka

server:
  port: 8000

eureka:
  instance:
    hostname: localhost
  client:
    # eureka.client.fetch-registry: 表示是否从 Eureka Server 获取注册信息,默认为true。如果这是一个单点的 Eureka Server,不需要同步其他节点的数据,设为false
    fetch-registry: false
    # eureka.client.register-with-eureka: 表示是否将自己注册到 Eureka Server, 默认为true。由于当前应用就是 Eureka Server, 因此设为 false
    register-with-eureka: false
    # 设置 Eureka Server 所在的地址,查询服务和注册服务都需要依赖这个地址
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

多实例本机版application.yml:

配置不同的 Profile, 需要注意, 如果要执行下面的 Profile, 需要将上面的配置注释掉

---
spring:
  application:
    name: ad-eureka
  profiles: server1
server:
  port: 8000
eureka:
  instance:
    #  一、本机服务,使用相同的ip注册会失败,提前在 C:\Windows\System32\drivers\etc\host配置不同的服务指向ip地址 ,参考:https://blog.csdn.net/shenjuntao520/article/details/112602553
    #    127.0.0.1 server1
    #    127.0.0.1 server2
    #    127.0.0.1 server3

    #    下面的配置prefer-ip-address: false
    #    设置好之后,使用 ping 命令测试是否可以 ping 通 (ping server1)。如果不能 ping 通,则没有生效,此时注销重新登录就可以。
    # 二、mvn package打包
    # 三、target中jar分别执行以下启动命令
    #    java -jar ad-eureka-1.0.0-SNAPSHOT.jar --spring.profiles.active=server1
    #    java -jar ad-eureka-1.0.0-SNAPSHOT.jar --spring.profiles.active=server2
    #    java -jar ad-eureka-1.0.0-SNAPSHOT.jar --spring.profiles.active=server3
    hostname: server1
    #    默认false,用于指定是否优先使用 IP 地址而不是主机名。
    #true:优先使用 IP 地址。
    #false:优先使用主机名(默认值)
    prefer-ip-address: false
  client:
    service-url:
      #      配置三个节点,该参数需要指向另外两个节点注册
      defaultZone: http://server2:8001/eureka/,http://server3:8002/eureka/

---
spring:
  application:
    name: ad-eureka
  profiles: server2
server:
  port: 8002
eureka:
  instance:
    hostname: server2
    prefer-ip-address: false
  client:
    service-url:
      defaultZone: http://server1:8000/eureka/,http://server3:8002/eureka/

---
spring:
  application:
    name: ad-eureka
  profiles: server3
server:
  port: 8003
eureka:
  instance:
    hostname: server3
    prefer-ip-address: false
  client:
    service-url:
      defaultZone: http://server1:8000/eureka/,http://server2:8001/eureka/

pom.xml

   <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

主类:



import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 *  Eureka两大核心功能:
 *    Service Registry(服务注册)
 *    Service Discovery(服务发现)
 *    这里是Eureka Server提供服务注册与发现
 *    Eureka还有两个角色Service Provider、Service Consumer
 */
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {

    /**
     * 由于 Eureka Server 已经被 SpringCloud 封装的非常好了,自己需要做的工作很少。
     * 所以,如果单实例启动不了,那么,几乎可以肯定是配置文件的问题。
     * 另外,需要注意,访问 Eureka 的 url 是:http://127.0.0.1:8000/,并没有 eureka 后缀。
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

Eureka Server 维护了系统中服务的元信息,这些元信息包含什么你知道吗 ?元数据如何存储?

四、网关Zuul 

1.Zuul生命周期

通过大量的过滤器实现的

 2.核心过滤器介绍

Pre filters:在请求被路由前调用,实现身份验证,在集群中请求的微服务,调试信息等等

  • 请求验证:验证请求的合法性,如检查认证信息、请求头等。
  • 请求修改:修改请求头或请求参数,添加或删除某些信息。
  • 路由决策:根据请求的某些特征决定是否路由到后端服务。

Routing filters:将请求路由到后端服务

它们主要用于:

  • 请求转发:将请求转发到指定的后端服务。
  • 负载均衡:选择合适的后端服务实例进行请求转发。
  • 请求代理:代理请求到后端服务,并返回响应。

Post filters:在请求被路由并响应后执行。它们主要用于:

  • 响应修改:修改响应头或响应体,添加或删除某些信息。
  • 日志记录:记录请求和响应的相关信息,用于监控和调试。
  • 异常处理:处理在请求处理过程中发生的异常,返回友好的错误信息。

 Custom filters:在 Zuul 网关中,自定义过滤器允许你实现特定的业务逻辑,以满足不同场景下的需求。自定义过滤器可以是 Pre 过滤器、Routing 过滤器或 Post 过滤器。比如自定义静态文件请求不路由至后端服务,直接返回给客户端。

Error filters:在 Zuul 网关中,Error 过滤器用于处理请求处理过程中发生的异常。Error 过滤器在请求的任何阶段(Pre、Routing、Post)发生异常时都会被触发。通过自定义 Error 过滤器,你可以捕获这些异常并返回友好的错误响应,从而提高系统的健壮性和用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2278539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React Native的现状与未来:从发展到展望

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Python在多个Excel文件中找出缺失数据行数多的文件

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;基于其中每一个文件内、某一列数据的特征&#xff0c;对其加以筛选&#xff0c;并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法。 首先&#xff0c;我们来明确一下本…

【JSqlParser】Java使用JSqlParser解析SQL语句总结

简述 Java解析SQL语句有很多工具都可以做到&#xff0c;比如Mybatis、Druid、目前用来用去最全面的仍然是Jsqlparser&#xff0c;它是一个Github上的开源项目&#xff0c;JSqlParser是一个用于解析SQL语句的Java库&#xff0c;它可以帮助开发者分析和操作SQL语句的结构。无论是…

WINFORM - DevExpress -> alertControl1提示信息框

第一个按钮为常规按钮, 单击触发 ButtonClick 事件. 第二个按钮有选中和未选中状态. 单击触发 ButtonDownChanged 事件。 if (e.ButtonName "alertButton2") { } 在dev用户界面中进行提示(usecontrolwinform) AlertInfo info new AlertInfo("提示",…

springboot全局异常处理示例

这种错误交给前端无法处理。 需要自定义一些错误响应类给前端 package cn.yam.bloomfilter.exception;import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.ht…

Windows远程桌面网关出现重大漏洞

微软披露了其Windows远程桌面网关&#xff08;RD Gateway&#xff09;中的一个重大漏洞&#xff0c;该漏洞可能允许攻击者利用竞争条件&#xff0c;导致拒绝服务&#xff08;DoS&#xff09;攻击。该漏洞被标识为CVE-2025-21225&#xff0c;已在2025年1月的补丁星期二更新中得到…

Shell正则表达式与文本处理三剑客(grep、sed、awk)

一、正则表达式 Shell正则表达式分为两种&#xff1a; 基础正则表达式&#xff1a;BRE&#xff08;basic regular express&#xff09; 扩展正则表达式&#xff1a;ERE&#xff08;extend regular express&#xff09;&#xff0c;扩展的表达式有、?、|和() 1.1 基本正则表…

基于 Spring Boot 和 Vue.js 的全栈购物平台开发实践

在现代 Web 开发中&#xff0c;前后端分离的架构已经成为主流。本文将分享如何使用 Spring Boot 和 Vue.js构建一个全栈购物平台&#xff0c;涵盖从后端 API 开发到前端页面实现的完整流程。 1. 技术栈介绍 后端技术栈 JDK 1.8&#xff1a;稳定且广泛使用的 Java 版本。 Spring…

Golang Gin系列-3:Gin Framework的项目结构

在Gin教程的第3篇&#xff0c;我们将讨论如何设置你的项目。这不仅仅是把文件扔得到处都是&#xff0c;而是要对所有东西的位置做出明智的选择。相信我&#xff0c;这些东西很重要。如果你做得对&#xff0c;你的项目会更容易处理。当你以后不再为了找东西或添加新功能而绞尽脑…

网络编程-UDP套接字

文章目录 UDP/TCP协议简介两种协议的联系与区别Socket是什么 UDP的SocketAPIDatagramSocketDatagramPacket 使用UDP模拟通信服务器端客户端测试 完整测试代码 UDP/TCP协议简介 两种协议的联系与区别 TCP和UDP其实是传输层的两个协议的内容, 差别非常大, 对于我们的Java来说, …

3.数据库系统

3.1数据库的基本概念 3.1.1:数据库体系结构 3.1.1.1集中式数据库系统 数据是集中的 数据管理是集中的 数据库系统的素有功能(从形式的用户接口到DBMS核心)都集中在DBMS所在的计算机 3.1.1.2C/S结构 客户端负责数据表示服务服务器主要负责数据库服务 数据库系统分为前端和后端…

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源&#xff1a; 论文链接&#xff1a;https://arxiv.org/pdf/2501.06252 代码链接&#xff1a;SakanaAI/self-adaptive-llms 论文发布时间&#xff1a;2025年1月14日 二、论文概述&#xff1a; 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…

【北京迅为】iTOP-4412全能版使用手册-第八十七章 安装Android Studio

iTOP-4412全能版采用四核Cortex-A9&#xff0c;主频为1.4GHz-1.6GHz&#xff0c;配备S5M8767 电源管理&#xff0c;集成USB HUB,选用高品质板对板连接器稳定可靠&#xff0c;大厂生产&#xff0c;做工精良。接口一应俱全&#xff0c;开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

LDD3学习8--linux的设备模型(TODO)

在LDD3的十四章&#xff0c;是Linux设备模型&#xff0c;其中也有说到这个部分。 我的理解是自动在应用层也就是用户空间实现设备管理&#xff0c;处理内核的设备事件。 事件来自sysfs和/sbin/hotplug。在驱动中&#xff0c;只要是使用了新版的函数&#xff0c;相应的事件就会…

Jira中bug的流转流程

Jira中bug的状态 1. 处理Bug的流程2. bug状态流转详述bug的状态通常包括 1. 处理Bug的流程 2. bug状态流转详述 bug的状态通常包括 未解决 1. 测试人员创建一个bug&#xff0c;填写bug的详细信息&#xff0c;如概要、bug级别、复现步骤、现状、预期结果等 2. 定位bug&#x…

解决关于Xcode16提交审核报错

# 问题描述 The following issues occurred while distributing your application. Asset validation failed Invalid Executable. The executable xxx.app/Frameworks/HappyDNS.framework/HappyDNS contains bitcode.(lD:ef5dd249-731f-4731-8173-8e4a12519352) Asset valida…

windows下安装并使用node.js

一、下载Node.js 选择对应你系统的Node.js版本下载 Node.js官网下载地址 Node.js中文网下载地址??? 这里我选择的是Windows64位系统的Node.js20.18.0&#xff08;LTS长期支持版本&#xff09;版本的.msi安装包程序 官网下载&#xff1a; 中文网下载&#xff1a; 二、安…

基于SpringBoot+Vue旅游管理系统的设计和实现(源码+文档+部署讲解)

个人名片 &#x1f525; 源码获取 | 毕设定制| 商务合作&#xff1a;《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片环境需要技术栈功能介绍功能说明 环境需要 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&…

python之二维几何学习笔记

一、概要 资料来源《机械工程师Python编程&#xff1a;入门、实战与进阶》安琪儿索拉奥尔巴塞塔 2024年6月 点和向量&#xff1a;向量的缩放、范数、点乘、叉乘、旋转、平行、垂直、夹角直线和线段&#xff1a;线段中点、离线段最近的点、线段的交点、直线交点、线段的垂直平…

RabbitMQ---消息确认和持久化

&#xff08;一&#xff09;消息确认 1.概念 生产者发送消息后&#xff0c;到达消费端会有以下情况&#xff1a; 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除&#xff0c;那么就可能会导致&#xff0c;消息处理异常想要再获取这条消息的时…