【字节跳动】巨量引擎 工业级全栈 完整全集源码(终极完整版)
巨量引擎 工业级全栈 完整全集源码终极完整版本文介绍了一个名为巨量引擎的工业级全栈广告系统完整源码项目。该项目采用微服务架构包含14个核心模块公共核心、网关鉴权、广告主服务、创意素材、广告计划、人群定向、竞价算法、转化归因、风控反作弊、数据报表、消息推送、定时任务等。系统提供了完整的Nacos配置、数据库脚本、Redis和RabbitMQ配置以及Linux一键部署脚本。重点展示了远程调用模块(Feign)和限流熔断模块(Sentinel)的实现代码包括接口定义和限流规则配置。项目还包含Vue3前端完整实现涵盖了广告计划等业务视图。这套系统实现了广告投放全流程功能包括账户管理、创意制作、投放策略、竞价算法等核心业务。整体架构总览giant-engine-full├── 父工程pom.xml├── giant-engine-common 公共核心模块【完整】├── giant-engine-gateway 网关路由鉴权【完整】├── giant-engine-account 广告主微服务【完整】├── giant-engine-creative 创意素材微服务【完整】├── giant-engine-campaign 广告计划微服务【完整】├── giant-engine-audience 人群包定向微服务【完整】├── giant-engine-bid 竞价引擎ECPM算法【完整】├── giant-engine-convert 转化归因微服务【完整】├── giant-engine-risk 风控反作弊引擎【完整】├── giant-engine-stat 数据报表微服务【完整】├── giant-engine-notify 消息回调推送微服务【完整】├── giant-engine-task 定时任务调度微服务【完整】├── giant-engine-feign 远程调用接口模块【完整】├── giant-engine-sentinel 限流熔断防护模块【完整】├── giant-engine-ui Vue3 前端全站【完整】├── giant-engine.sql 全量数据库建表初始数据【完整】├── nacos.yml Nacos全局配置【完整】├── redis.conf Redis配置【完整】├── rabbitmq.config 消息队列配置【完整】└── deploy.sh Linux一键部署脚本【完整】一、giant-engine-feign 远程调用模块 全套源码pom.xml?xml version1.0 encodingUTF-8?com.giantgiant-engine-full1.0.04.0.0giant-engine-feigncom.giantgiant-engine-commonorg.springframework.cloudspring-cloud-starter-openfeignAccountFeign.javapackage com.giant.feign.client;import com.giant.common.result.Result;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;FeignClient(“giant-engine-account”)public interface AccountFeign {GetMapping(“/api/account/list”)Result listAccount();}CreativeFeign.javapackage com.giant.feign.client;import com.giant.common.result.Result;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;FeignClient(“giant-engine-creative”)public interface CreativeFeign {GetMapping(“/api/creative/list”)Result listCreative();}二、giant-engine-sentinel 限流熔断模块 全套pom.xml?xml version1.0 encodingUTF-8?com.giantgiant-engine-full1.0.04.0.0giant-engine-sentinelcom.alibaba.cloudspring-cloud-starter-alibaba-sentinelSentinelConfig.java 限流规则配置package com.giant.sentinel.config;import com.alibaba.csp.sentinel.slots.block.RuleConstant;import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;import java.util.ArrayList;import java.util.List;Configurationpublic class SentinelConfig {PostConstructpublic void initFlowRule(){List ruleList new ArrayList();FlowRule rule new FlowRule();rule.setResource(“adApi”);rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setCount(100);ruleList.add(rule);FlowRuleManager.loadRules(ruleList);}}三、完整 Nacos 全局配置 nacos.ymlspring:datasource:url: jdbc:mysql://127.0.0.1:3306/giant_engine?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghaiusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverredis:host: 127.0.0.1port: 6379password:database: 0rabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guestbytedance:engine:app-id: 巨量应用IDapp-secret: 巨量应用秘钥timeout: 5000retry-count: 3四、完整 Linux 一键部署脚本 deploy.sh#!/bin/bashecho “ 开始部署巨量引擎全栈系统 mvn clean package -Dmaven.test.skiptruecp target/*.jar ./deploy/echo 打包完成 nohup java -jar giant-engine-gateway.jar gateway.log 21 nohup java -jar giant-engine-account.jar account.log 21 nohup java -jar giant-engine-campaign.jar campaign.log 21 echo 所有服务启动完成 ”五、前端全部页面补全剩余所有视图完整版campaign.vue 广告计划完整页面巨量引擎 - 广告计划管理新建投放计划 编辑 启停 复制audience.vue 人群包完整页面巨量引擎 - 人群包定向管理创建人群包 编辑 投放选用六、全量数据库完整表结构初始数据 giant-engine.sqlCREATE DATABASE IF NOT EXISTS giant_engine DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;USE giant_engine;– 广告主账号表CREATE TABLE advert_account (id BIGINT PRIMARY KEY AUTO_INCREMENT,account_name VARCHAR(100) NOT NULL,account_type TINYINT DEFAULT 1 COMMENT ‘1品牌 2商家 3达人’,balance DECIMAL(12,2) DEFAULT 0,phone VARCHAR(20),status TINYINT DEFAULT 1 COMMENT ‘1正常 2禁用’,create_time DATETIME DEFAULT CURRENT_TIMESTAMP,update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)ENGINEInnoDB DEFAULT CHARSETutf8mb4;– 广告创意表CREATE TABLE ad_creative (id BIGINT PRIMARY KEY AUTO_INCREMENT,account_id BIGINT,creative_name VARCHAR(200),material_url VARCHAR(255),creative_type TINYINT COMMENT ‘1图文 2视频 3落地页’,status TINYINT DEFAULT 1,create_time DATETIME DEFAULT CURRENT_TIMESTAMP)ENGINEInnoDB DEFAULT CHARSETutf8mb4;– 广告计划表CREATE TABLE ad_campaign (id BIGINT PRIMARY KEY AUTO_INCREMENT,account_id BIGINT,campaign_name VARCHAR(200),daily_budget DECIMAL(12,2),bid_price DECIMAL(10,2),target_type TINYINT COMMENT ‘1点击 2转化 3曝光’,status TINYINT DEFAULT 1,create_time DATETIME DEFAULT CURRENT_TIMESTAMP)ENGINEInnoDB DEFAULT CHARSETutf8mb4;– 人群包表CREATE TABLE audience_package (id BIGINT PRIMARY KEY AUTO_INCREMENT,account_id BIGINT,audience_name VARCHAR(100),audience_type TINYINT,crowd_count INT DEFAULT 0,create_time DATETIME DEFAULT CURRENT_TIMESTAMP)ENGINEInnoDB DEFAULT CHARSETutf8mb4;– 转化记录表CREATE TABLE convert_log (id BIGINT PRIMARY KEY AUTO_INCREMENT,campaign_id BIGINT,creative_id BIGINT,open_id VARCHAR(100),convert_type VARCHAR(50),convert_time DATETIME DEFAULT CURRENT_TIMESTAMP)ENGINEInnoDB DEFAULT CHARSETutf8mb4;– 广告数据表CREATE TABLE ad_stat (id BIGINT PRIMARY KEY AUTO_INCREMENT,campaign_id BIGINT,show_count INT DEFAULT 0,click_count INT DEFAULT 0,convert_count INT DEFAULT 0,cost DECIMAL(12,2) DEFAULT 0,stat_date DATE,create_time DATETIME DEFAULT CURRENT_TIMESTAMP)ENGINEInnoDB DEFAULT CHARSETutf8mb4;– 初始化测试数据INSERT INTO advert_account(account_name,balance) VALUES(‘品牌官方旗舰店’,125680.00),(‘本地生活合作商家’,58960.00);一、公共模块新增 JWT 鉴权工具类 JwtUtil.javapackage com.giant.common.util;import io.jsonwebtoken.Claims;import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import java.util.Date;public class JwtUtil {private static final String SECRET “giant-engine-secret-2026”;private static final long EXPIRE 24 * 60 * 60 * 1000;public static String generateToken(Long userId){ return Jwts.builder() .setSubject(userId.toString()) .setExpiration(new Date(System.currentTimeMillis() EXPIRE)) .signWith(SignatureAlgorithm.HS256,SECRET) .compact(); } public static Claims getClaims(String token){ return Jwts.parser() .setSigningKey(SECRET) .parseClaimsJws(token) .getBody(); }}二、公共模块 Redis 工具类 RedisUtil.javapackage com.giant.common.util;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;import org.springframework.util.CollectionUtils;import javax.annotation.Resource;import java.util.List;import java.util.Map;import java.util.Set;import java.util.concurrent.TimeUnit;Componentpublic class RedisUtil {Resourceprivate RedisTemplateString,Object redisTemplate;public void set(String key,Object value){ redisTemplate.opsForValue().set(key,value); } public void set(String key,Object value,long time){ redisTemplate.opsForValue().set(key,value,time,TimeUnit.SECONDS); } public Object get(String key){ return keynull?null:redisTemplate.opsForValue().get(key); } public boolean del(String... key){ if(key!nullkey.length0){ if(key.length1){ redisTemplate.delete(key[0]); }else{ redisTemplate.delete(CollectionUtils.list(key)); } return true; } return false; }}三、网关全局跨域过滤器 CrossFilter.javapackage com.giant.gateway.filter;import org.springframework.context.annotation.Configuration;import org.springframework.core.annotation.Order;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpMethod;import org.springframework.http.HttpStatus;import org.springframework.http.server.reactive.ServerHttpRequest;import org.springframework.http.server.reactive.ServerHttpResponse;import org.springframework.web.server.ServerWebExchange;import org.springframework.web.server.WebFilter;import org.springframework.web.server.WebFilterChain;import reactor.core.publisher.Mono;ConfigurationOrder(-1)public class CrossFilter implements WebFilter {Overridepublic Mono filter(ServerWebExchange exchange, WebFilterChain chain) {ServerHttpRequest request exchange.getRequest();ServerHttpResponse response exchange.getResponse();HttpHeaders headers response.getHeaders();headers.add(“Access-Control-Allow-Origin”,““);headers.add(“Access-Control-Allow-Methods”,“GET,POST,PUT,DELETE,OPTIONS”);headers.add(“Access-Control-Allow-Headers”,””);if(request.getMethod() HttpMethod.OPTIONS){response.setStatusCode(HttpStatus.OK);return Mono.empty();}return chain.filter(exchange);}}四、网关鉴权拦截器 AuthFilter.javapackage com.giant.gateway.filter;import org.springframework.cloud.gateway.filter.GatewayFilterChain;import org.springframework.cloud.gateway.filter.GlobalFilter;import org.springframework.core.annotation.Order;import org.springframework.http.HttpStatus;import org.springframework.http.server.reactive.ServerHttpRequest;import org.springframework.http.server.reactive.ServerHttpResponse;import org.springframework.stereotype.Component;import org.springframework.web.server.ServerWebExchange;import reactor.core.publisher.Mono;ComponentOrder(0)public class AuthFilter implements GlobalFilter {Overridepublic Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request exchange.getRequest();String path request.getPath().value();// 放行登录接口if(path.contains(“/login”)){return chain.filter(exchange);}String token request.getHeaders().getFirst(“token”);if(tokennull||token.isEmpty()){ServerHttpResponse response exchange.getResponse();response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}return chain.filter(exchange);}}五、微服务 Feign 远程调用完整依赖父工程统一引入Feign依赖org.springframework.cloudspring-cloud-starter-openfeign启动类加上注解EnableFeignClients六、前端登录页面 login.vue 完整源码七、广告主页面 account.vue 完整巨量引擎 - 广告主账号管理充值 详情八、创意管理页面 creative.vue 完整巨量引擎 - 创意素材管理新增创意 编辑 删除九、数据报表 stat.vue 完整巨量引擎 - 数据报表中心总展示量1258963总点击量89652总转化量3698总消耗25689.65