当前位置: 首页 > news >正文

【字节跳动】巨量引擎 工业级全栈 完整全集源码(终极完整版)

巨量引擎 工业级全栈 完整全集源码(终极完整版)

本文介绍了一个名为"巨量引擎"的工业级全栈广告系统完整源码项目。该项目采用微服务架构,包含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 version="1.0" encoding="UTF-8"?>



com.giant
giant-engine-full
1.0.0

4.0.0
giant-engine-feign


com.giant
giant-engine-common


org.springframework.cloud
spring-cloud-starter-openfeign



AccountFeign.java
package 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.java
package 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 version="1.0" encoding="UTF-8"?>



com.giant
giant-engine-full
1.0.0

4.0.0
giant-engine-sentinel


com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel



SentinelConfig.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;

@Configuration
public class SentinelConfig {
@PostConstruct
public 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.yml
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/giant_engine?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: 127.0.0.1
port: 6379
password:
database: 0
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest

bytedance:
engine:
app-id: 巨量应用ID
app-secret: 巨量应用秘钥
timeout: 5000
retry-count: 3
四、完整 Linux 一键部署脚本 deploy.sh
#!/bin/bash
echo “===== 开始部署巨量引擎全栈系统 ="
mvn clean package -Dmaven.test.skip=true
cp target/*.jar ./deploy/
echo "
= 打包完成 ="
nohup java -jar giant-engine-gateway.jar > gateway.log 2>&1 &
nohup java -jar giant-engine-account.jar > account.log 2>&1 &
nohup java -jar giant-engine-campaign.jar > campaign.log 2>&1 &
echo "
= 所有服务启动完成 =====”
五、前端全部页面补全(剩余所有视图完整版)

campaign.vue 广告计划完整页面

巨量引擎 - 广告计划管理

新建投放计划 编辑 启停 复制

audience.vue 人群包完整页面

巨量引擎 - 人群包定向管理

创建人群包 编辑 投放选用

六、全量数据库完整表结构+初始数据 giant-engine.sql
CREATE 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
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

– 广告创意表
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
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

– 广告计划表
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
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

– 人群包表
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
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

– 转化记录表
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
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

– 广告数据表
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
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

– 初始化测试数据
INSERT INTO advert_account(account_name,balance) VALUES
(‘品牌官方旗舰店’,125680.00),
(‘本地生活合作商家’,58960.00);

一、公共模块新增 JWT 鉴权工具类 JwtUtil.java
package 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.java
package 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;

@Component
public class RedisUtil {
@Resource
private RedisTemplate<String,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 key==null?null:redisTemplate.opsForValue().get(key); } public boolean del(String... key){ if(key!=null&&key.length>0){ if(key.length==1){ redisTemplate.delete(key[0]); }else{ redisTemplate.delete(CollectionUtils.list(key)); } return true; } return false; }

}
三、网关全局跨域过滤器 CrossFilter.java
package 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;

@Configuration
@Order(-1)
public class CrossFilter implements WebFilter {
@Override
public 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.java
package 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;

@Component
@Order(0)
public class AuthFilter implements GlobalFilter {
@Override
public 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(token==null||token.isEmpty()){
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
return response.setComplete();
}
return chain.filter(exchange);
}
}
五、微服务 Feign 远程调用完整依赖

父工程统一引入Feign依赖:

org.springframework.cloud
spring-cloud-starter-openfeign

启动类加上注解:
@EnableFeignClients
六、前端登录页面 login.vue 完整源码

七、广告主页面 account.vue 完整

巨量引擎 - 广告主账号管理

充值 详情

八、创意管理页面 creative.vue 完整

巨量引擎 - 创意素材管理

新增创意 编辑 删除

九、数据报表 stat.vue 完整

巨量引擎 - 数据报表中心

总展示量
1258963
总点击量
89652
总转化量
3698
总消耗
25689.65
http://www.jsqmd.com/news/945691/

相关文章:

  • 量子过程层析技术:原理、应用与工程实践
  • Flink生产环境Checkpoint清理实战:RocksDB增量模式下,手动删除的正确姿势与避坑指南
  • 5个必装插件!让你的Windows任务栏变身全能监控中心 [特殊字符]
  • 从DIY角度聊聊:用常见开发板(如STM32)实现一个简易相位激光测距模块的难点在哪?
  • MSP430F1611硬件平台上的俄罗斯方块游戏完整工程源码(含CCS工程配置与驱动模块)
  • 如何开发一个 LangGraph 智能体?从 0 到 1 搭建可控、可扩展的 AI Agent
  • 上海工厂食堂承包价格,星力餐饮性价比高 - 工业品牌热点
  • 计算机毕业设计之基于Python的饿了么数据分析与可视化
  • 内网开发环境福音:手把手搞定Jenkins离线安装与SVN+Maven项目部署(含插件依赖避坑)
  • bitset位图
  • Topit:3步解决Mac多窗口管理难题,让你的工作效率提升200%
  • 为什么92%的AI抽奖活动被用户质疑不公?揭秘OpenAI/DeepSeek模型偏见校准的4个硬核参数
  • 智能仓储AI化不是选择题(而是生存线):Gartner最新评估显示延迟部署将导致单仓年均成本激增¥412万
  • 《OpenClaw远程网关:密钥体系与长连接的深度拆解》
  • 写技术白皮书也能上岸?留学生利用技术布道者(Evangelist)差异化求职「蒸汽求职分享」
  • 30分钟搞定!本地私有知识库搭建教程,让你的文档不再受云端束缚!
  • 多个 PDF 合并成一个的几种方法:桌面软件、系统工具、命令行,各自适合什么场景
  • 2026年6月嘉兴GEO优化公司怎么选?十大口碑服务商案例效果全维度测评 - 玖叁鹿
  • 通达信ChanlunX缠论插件:终极自动化技术分析解决方案
  • 网关崩了?先抓个 OOM 再谈动态路由安全,这招保命!
  • Python自动下载沪深300日线数据并生成Excel表格(WindPy驱动)
  • 新手视角,学习yolov8(2)(视频追踪)
  • 告别驱动烦恼:手把手教你搞定EZ-USB FX3开发板的Windows驱动安装(附SDK 1.3.3路径详解)
  • 紧急预警:2024Q3起,未完成AI社交整合的企业将丧失87%的私域实时响应权(含合规迁移倒计时表)
  • 2026 年最强 SRM 系统:汽车行业适配的 SRM 软件首选这 10 款
  • 千寻智能Spirit v1.6反超英伟达Cosmos 3,靠真实数据闭环3个月融资近50亿!
  • 无人机航拍+深度学习落地智慧农业:作物出苗率目标检测开源数据集工程详解|YOLO作物计数、田间苗期AI监测、农情数字化训练资源
  • openGSD安装与配置国产大模型
  • 从 AQS 锁竞争与队列机制深度剖析 Java 并发中 Spring IoC循环依赖终极解决方案 的核心原理
  • GroqCloud