当前位置:首页>python>零Python依赖的Java Agent架构:Spring AI Alibaba + JavaCPP + Camel 全协议实战

零Python依赖的Java Agent架构:Spring AI Alibaba + JavaCPP + Camel 全协议实战

  • 2026-06-30 02:49:21
零Python依赖的Java Agent架构:Spring AI Alibaba + JavaCPP + Camel 全协议实战

零Python依赖的Java Agent架构:Spring AI Alibaba + JavaCPP + Camel 全协议实战

架构总览

一、为什么Java程序员需要自己的Agent架构?

2026年的AI工程化战场,有一个残酷的现实:90%的Agent框架是Python原生。LangChain、AutoGen、CrewAI……这些名字对Java工程师来说,意味着要么接受Python技术债,要么在跨语言调用的泥潭里挣扎。

但企业级场景从不妥协:

  • 金融合规:交易数据绝不出域,必须本地推理
  • 工业质检:产线延迟要求<50ms,HTTP往返不可接受
  • 现有系统:ERP/MES/SCADA全是Java生态,重写成本极高

核心矛盾:Python生态丰富 vs Java生态工程化强。我们需要一条第三条路——用Java全栈构建Agent,同时兼容OpenAI/Anthropic/MCP全协议。


二、架构全景

2.1 分层职责矩阵

层级
核心职责
技术选型
不可替代性
统一入口
多协议接入
REST/WebSocket/Kafka/MQTT
企业系统异构接入
协议适配
屏蔽模型差异
OpenAI/Anthropic/MCP/A2A
模型供应商解耦
核心编排
ReAct决策+记忆管理
自研AgentOrchestrator
业务逻辑定制化
模型推理
本地/云端混合
JavaCPP+llama.cpp / vLLM
数据主权+成本控制
MCP工具
外部能力扩展
自研MCP Client/Server
工具生态标准化
记忆数据
状态持久化
PgVector/Redis/PostgreSQL
上下文连续性
企业集成
业务系统打通
Apache Camel
300+组件生态
基础设施
部署运维
Spring Boot/GraalVM/K8s
云原生标准化

三、协议适配层:一套代码,兼容所有模型

3.1 多协议并发的工程挑战

关键:OpenAI和Anthropic的API设计哲学截然不同——OpenAI是messages数组,Anthropic是system+messages分离。Spring AI Alibaba的核心价值在于抽象统一,但我们选择自研适配层以获得完全可控性。

3.2 协议适配器实现

/** * 协议适配器接口:所有模型统一走此抽象 */publicinterfaceProtocolAdapter{String chat(String message);Stream<String> stream(String message);List<ToolDefinition> getAvailableTools();}/** * OpenAI兼容适配器:支持vLLM/TGI/OneAPI等任意端点 */@ComponentpublicclassOpenAICompatibleAdapterimplementsProtocolAdapter{privatefinal RestClient client;publicOpenAICompatibleAdapter(        @Value("${agent.openai.base-url}") String baseUrl,        @Value("${agent.openai.api-key:}") String apiKey    ) {this.client = RestClient.builder()            .baseUrl(baseUrl)            .defaultHeader("Authorization""Bearer " + apiKey)            .build();    }@Overridepublic String chat(String message){var request = Map.of("model""gpt-5.5","messages", List.of(Map.of("role""user""content", message)),"temperature"0.7        );return client.post()            .uri("/v1/chat/completions")            .body(request)            .retrieve()            .body(OpenAIResponse.class)            .choices().get(0).message().content();    }@Overridepublic Stream<String> stream(String message){// SSE流式解析:逐chunk返回,降低首Token延迟return client.post()            .uri("/v1/chat/completions")            .body(Map.of("model""gpt-5.5""messages", List.of(...), "stream"true))            .retrieve()            .toStream(String.class)            .map(this::parseSSEChunk);    }}/** * Anthropic兼容适配器:处理system字段分离特性 */@ComponentpublicclassAnthropicCompatibleAdapterimplementsProtocolAdapter{@Overridepublic String chat(String message){var request = Map.of("model""claude-opus-4-7","max_tokens"4096,"messages", List.of(Map.of("role""user""content", message))        );return client.post()            .uri("/v1/messages")            .body(request)            .retrieve()            .body(AnthropicResponse.class)            .content().get(0).text();    }}

3.3 协议选型决策树


四、本地推理层:JavaCPP + llama.cpp 深度绑定

4.1 为什么不用Ollama HTTP?

方案
延迟
依赖
可控性
适用场景
Ollama HTTP
~20ms+网络开销
需维护Ollama进程
开发调试
JavaCPP JNI
~5ms纯内存调用
仅so/dll文件
极高生产环境
GraalVM Native
~3ms
需AOT编译
极高
Serverless冷启动

工业质检场景:产线摄像头每秒30帧,每帧需AI决策。HTTP往返20ms意味着总延迟>33ms,直接掉帧。JavaCPP JNI方案将推理嵌入JVM进程,零序列化开销

4.2 JavaCPP绑定实现

/** * llama.cpp C API的JavaCPP绑定 */@Platform(    include = {"llama.h"},    link = {"llama""ggml"},    preload = {"libllama""libggml"})publicclassLlamaCpp{static { Loader.load(); }// 核心API绑定publicstaticnative llama_model_params llama_model_default_params();publicstaticnative llama_context_params llama_context_default_params();publicstaticnative llama_model llama_load_model_from_file(String path, llama_model_params params);publicstaticnative llama_context llama_new_context_with_model(llama_model model, llama_context_params params);publicstaticnativevoidllama_free(llama_model model);publicstaticnativevoidllama_free_context(llama_context ctx);publicstaticnativeintllama_n_vocab(llama_model model);publicstaticnativeintllama_tokenize(llama_model model, String text, IntPointer tokens, int n_max_tokens, boolean add_bos, boolean special);publicstaticnativeintllama_decode(llama_context ctx, llama_batch batch);publicstaticnativefloatllama_get_logits_ith(llama_context ctx, int i);// 结构体定义@Opaquepublicstaticclassllama_modelextendsPointer{}@Opaquepublicstaticclassllama_contextextendsPointer{}@NoOffsetpublicstaticclassllama_model_paramsextendsPointer{publicnativeintn_gpu_layers()publicnative llama_model_params n_gpu_layers(int n);publicnativebooleanuse_mmap()publicnative llama_model_params use_mmap(boolean b);    }@NoOffsetpublicstaticclassllama_context_paramsextendsPointer{publicnativeintn_ctx()publicnative llama_context_params n_ctx(int n);publicnativeintn_threads()publicnative llama_context_params n_threads(int n);    }}

4.3 本地推理服务封装

@ServicepublicclassLocalInferenceService{private LlamaCpp.llama_model model;private LlamaCpp.llama_context ctx;privatefinal Map<Integer, String> vocabCache = new ConcurrentHashMap<>();@PostConstructpublicvoidinit(        @Value("${agent.local.model-path}") String modelPath,        @Value("${agent.local.n-gpu-layers:0}")int nGpuLayers,        @Value("${agent.local.n-ctx:8192}")int nCtx    ) {// 加载模型:GPU层数决定性能/显存平衡var modelParams = LlamaCpp.llama_model_default_params();        modelParams.n_gpu_layers(nGpuLayers);  // 33层 offload到GPUthis.model = LlamaCpp.llama_load_model_from_file(modelPath, modelParams);if (this.model == nullthrownew RuntimeException("模型加载失败: " + modelPath);// 创建上下文var ctxParams = LlamaCpp.llama_context_default_params();        ctxParams.n_ctx(nCtx);  // 8K上下文        ctxParams.n_threads(Runtime.getRuntime().availableProcessors());this.ctx = LlamaCpp.llama_new_context_with_model(model, ctxParams);// 预缓存词表:避免重复调用C函数int nVocab = LlamaCpp.llama_n_vocab(model);for (int i = 0; i < nVocab; i++) {            vocabCache.put(i, LlamaCpp.llama_token_to_piece(model, i));        }        log.info("本地模型加载完成: {}, GPU层数: {}, 上下文: {}", modelPath, nGpuLayers, nCtx);    }/**     * 同步生成:贪心解码     */public String generate(String prompt, int maxTokens, float temperature){int[] tokens = tokenize(prompt, true);int nPast = 0;// 预填充promptfor (int token : tokens) {            decode(newint[]{token}, nPast++);        }// 自回归生成        StringBuilder output = new StringBuilder();for (int i = 0; i < maxTokens; i++) {int nextToken = sampleToken(temperature);if (nextToken == 2break;  // EOS token            String piece = vocabCache.getOrDefault(nextToken, "");            output.append(piece);            decode(newint[]{nextToken}, nPast++);        }return output.toString();    }/**     * 流式生成:逐token回调,降低首Token延迟     */publicvoidgenerateStream(String prompt, int maxTokens, float temperature, Consumer<String> onToken){int[] tokens = tokenize(prompt, true);int nPast = 0;for (int token : tokens) {            decode(newint[]{token}, nPast++);        }for (int i = 0; i < maxTokens; i++) {int nextToken = sampleToken(temperature);if (nextToken == 2break;            String piece = vocabCache.getOrDefault(nextToken, "");if (!piece.isEmpty()) onToken.accept(piece);            decode(newint[]{nextToken}, nPast++);        }    }@PreDestroypublicvoiddestroy(){if (ctx != null) LlamaCpp.llama_free_context(ctx);if (model != null) LlamaCpp.llama_free(model);    }}

4.4 GPU卸载策略与性能调优


五、MCP协议自研实现:不依赖任何框架

5.1 为什么自研MCP?

Spring AI Alibaba已内置MCP支持,但我们选择自研基于三个考量:

  1. 协议演进快:MCP从2024-11到2025-06已迭代3个大版本,框架更新滞后
  2. 传输层定制:工业场景需要MQTT over MCP,标准实现不支持
  3. 零依赖原则:每引入一个框架,就是一颗定时炸弹

5.2 MCP协议数据模型

/** * MCP JSON-RPC 2.0 请求 */public record MCPRequest(    String jsonrpc,      // 固定"2.0"    Long id,             // 请求标识,通知为null    String method,       // 方法名    JsonNode params      // 参数){}/** * MCP JSON-RPC 2.0 响应 */public record MCPResponse(    String jsonrpc,    Long id,    JsonNode result,     // 成功时返回    MCPError error       // 失败时返回){}public record MCPError(int code, String message, JsonNode data){}

5.3 MCP Client:STDIO模式

@ComponentpublicclassMCPStdioClient{private Process process;private BufferedReader reader;private PrintWriter writer;privatefinal ObjectMapper mapper = new ObjectMapper();privatefinal Map<Long, CompletableFuture<JsonNode>> pending = new ConcurrentHashMap<>();privatefinal AtomicLong idGenerator = new AtomicLong(1);publicvoidconnect(String command, String... args)throws IOException {        ProcessBuilder pb = new ProcessBuilder(command, args);        pb.redirectErrorStream(true);this.process = pb.start();this.reader = new BufferedReader(new InputStreamReader(process.getInputStream()));this.writer = new PrintWriter(process.getOutputStream(), true);// 启动读取线程        Thread readerThread = new Thread(this::readLoop, "mcp-stdio-reader");        readerThread.setDaemon(true);        readerThread.start();// 初始化握手        initialize();    }privatevoidreadLoop(){        String line;try {while ((line = reader.readLine()) != null) {                MCPResponse response = mapper.readValue(line, MCPResponse.class);                CompletableFuture<JsonNode> future = pending.remove(response.id());if (future != null) future.complete(response.result());            }        } catch (IOException e) {            log.error("MCP读取异常", e);        }    }/**     * MCP握手:协商协议版本和能力     */publicvoidinitialize(){var capabilities = Map.of("roots", Map.of("listChanged"true),"sampling", Map.of()        );        call("initialize", Map.of("protocolVersion""2024-11-05","capabilities", capabilities,"clientInfo", Map.of("name""java-agent""version""1.0.0")        ));    }/**     * 异步调用:支持并发请求     */public CompletableFuture<JsonNode> call(String method, Object params){long id = idGenerator.getAndIncrement();        MCPRequest request = new MCPRequest("2.0", id, method, mapper.valueToTree(params));        CompletableFuture<JsonNode> future = new CompletableFuture<>();        pending.put(id, future);try {            writer.println(mapper.writeValueAsString(request));        } catch (JsonProcessingException e) {            future.completeExceptionally(e);        }return future;    }/**     * 工具调用便捷方法     */public CompletableFuture<String> callTool(String toolName, Map<String, Object> arguments){return call("tools/call", Map.of("name", toolName, "arguments", arguments))            .thenApply(result -> result.get("content").get(0).get("text").asText());    }}

5.4 MCP Server:SSE模式(供外部Agent调用)

@RestController@RequestMapping("/mcp")publicclassMCPSseServer{privatefinal Map<String, ToolHandler> tools = new ConcurrentHashMap<>();privatefinal SseEmitterManager emitters = new SseEmitterManager();@Autowiredprivate LocalInferenceService inferenceService;@PostConstructpublicvoidregisterTools(){// 注册本地推理工具:让外部Agent调用我们的本地模型        tools.put("local_chat", args -> {            String prompt = args.get("prompt").asText();            String response = inferenceService.generate(prompt, 20480.7f);return Map.of("content", List.of(Map.of("type""text""text", response)));        });// 注册文件读取工具        tools.put("read_file", args -> {            String path = args.get("path").asText();            String content = Files.readString(Path.of(path));return Map.of("content", List.of(Map.of("type""text""text", content)));        });    }@GetMapping("/sse")public SseEmitter connect(){        SseEmitter emitter = new SseEmitter(0L);        String sessionId = UUID.randomUUID().toString();        emitters.register(sessionId, emitter);// 发送endpoint事件        emitter.send(SseEmitter.event()            .name("endpoint")            .data("/mcp/message?sessionId=" + sessionId));return emitter;    }@PostMapping("/message")publicvoidmessage(@RequestParam String sessionId, @RequestBody JsonNode request){        String method = request.get("method").asText();        Long id = request.has("id") ? request.get("id").asLong() : null;        JsonNode result = switch (method) {case"initialize" -> Map.of("protocolVersion""2024-11-05","serverInfo", Map.of("name""java-llama-server""version""1.0.0"),"capabilities", Map.of("tools", Map.of("listChanged"false))            );case"tools/list" -> Map.of("tools", tools.values().stream().map(ToolHandler::getDefinition).toList());case"tools/call" -> {                String toolName = request.get("params").get("name").asText();                JsonNode args = request.get("params").get("arguments");                yield tools.get(toolName).execute(args);            }default -> thrownew IllegalArgumentException("Unknown method: " + method);        };if (id != null) {            emitters.send(sessionId, Map.of("jsonrpc""2.0""id", id, "result", result));        }    }}

六、核心编排层:ReAct循环与智能路由

6.1 ReAct循环可视化

6.2 智能路由决策引擎

@ComponentpublicclassAgentOrchestrator{@Autowiredprivate Map<String, ProtocolAdapter> adapters;@Autowiredprivate LocalInferenceService localService;@Autowiredprivate MCPStdioClient mcpClient;/**     * ReAct循环:思考 → 行动 → 观察 → 回答     */public String react(String userInput, AgentConfig config){        StringBuilder memory = new StringBuilder();        memory.append("用户问题:").append(userInput).append("\n");for (int step = 0; step < config.maxSteps(); step++) {// Step 1: Thought - 分析当前状态            String thought = think(memory.toString(), config);            memory.append("思考:").append(thought).append("\n");// Step 2: Action - 解析需要调用的工具            Action action = parseAction(thought);if (action == null || action.type() == ActionType.ANSWER) {return extractAnswer(thought);            }// Step 3: Observation - 执行工具,获取结果            String observation = executeAction(action, config);            memory.append("观察:").append(observation).append("\n");        }return"达到最大步数限制,当前最佳回答:\n" + memory;    }/**     * 模型路由:根据策略选择本地或云端     */private String routeAndGenerate(String prompt, AgentConfig config){returnswitch (config.routingStrategy()) {case LOCAL_ONLY -> localService.generate(prompt, 20480.7f);case CLOUD_ONLY -> adapters.get("openai").chat(prompt);case ANTHROPIC_ONLY -> adapters.get("anthropic").chat(prompt);case AUTO -> {// 启发式路由:短文本+无敏感数据 → 本地if (prompt.length() < 500 && !containsSensitiveData(prompt)) {                    yield localService.generate(prompt, 20480.7f);                } else {                    yield adapters.get("openai").chat(prompt);                }            }case COST_OPTIMIZED -> {// 成本优先:本地能处理的绝不出域                yield localService.generate(prompt, 20480.7f);            }        };    }privatebooleancontainsSensitiveData(String text){// 正则检测敏感信息return text.matches(".*\\b(身份证|密码|密钥|token|secret|银行卡)\\b.*");    }}publicenum RoutingStrategy {     LOCAL_ONLY,      // 强制本地:数据绝对不出域    CLOUD_ONLY,      // 强制云端:复杂推理    ANTHROPIC_ONLY,  // 强制Anthropic:特定能力    AUTO,            // 自动路由:基于启发式规则    COST_OPTIMIZED   // 成本优先:本地优先}

七、企业集成层:Apache Camel的300+武器库

7.1 Camel与Agent的桥接模式

7.2 工业质检场景实战

@ConfigurationpublicclassQualityInspectionRouteextendsRouteBuilder{@Autowiredprivate AgentOrchestrator orchestrator;@Overridepublicvoidconfigure(){// 从产线MQTT接收图像检测请求        from("mqtt:inspection?host=tcp://plc-gateway:1883&subscribeTopicName=quality/check")            .routeId("quality-inspection")            .unmarshal().json(JsonLibrary.Jackson, InspectionRequest.class)            .process(ex -> {                InspectionRequest req = ex.getIn().getBody(InspectionRequest.class);// 构建Agent输入:包含图像base64+质检标准                String agentInput = String.format("质检任务:产品ID=%s, 缺陷类型=%s, 图像数据=%s",                    req.productId(), req.defectType(), req.imageBase64()                );// 强制本地推理:产线数据绝不出域                String result = orchestrator.react(agentInput, new AgentConfig(3, RoutingStrategy.LOCAL_ONLY));                ex.getIn().setBody(result);                ex.getIn().setHeader("productId", req.productId());            })            .choice()                .when(body().contains("NG"))  // 不合格                    .to("plc:stop?station={{inspection.station.id}}")  // 停止产线                    .to("kafka:defect-alerts")                .otherwise()  // 合格                    .to("plc:pass?station={{inspection.station.id}}")  // 放行                    .to("jpa:inspectionRecord");    }}

7.3 性能关键路径优化

优化点
策略
效果
模型预热
启动时预加载GGUF,避免冷启动
首请求延迟从5s降至50ms
KV Cache复用
同会话共享上下文状态
重复查询延迟降低80%
Batch推理
多请求合并解码
GPU利用率提升3x
Camel异步
SEDA组件解耦生产消费
吞吐量提升5x

八、基础设施层:从JAR到Native Image

8.1 GraalVM Native Image编译

# 编译命令mvn -Pnative native:compile# 产出:纯二进制可执行文件,无JVM依赖./target/agent-native \  --agent.local.model-path=/opt/models/qwen3-8b-q4.gguf \  --agent.local.n-gpu-layers=33

Native Image优势

  • 启动时间:45ms(JVM冷启动的1/100)
  • 内存占用:80MB(JVM的1/5)
  • 无JIT预热:首请求即峰值性能

九、全链路部署架构


十、总结:Java Agent

核心原则

  1. 协议兼容是底线:OpenAI/Anthropic/MCP/A2A必须全支持,模型供应商随时可替换
  2. 本地推理是王牌:JavaCPP JNI实现零网络延迟,满足工业级实时性
  3. Camel是护城河:300+组件覆盖所有企业集成场景,避免重复造轮子
  4. Native Image是未来:45ms启动+80MB内存,让Agent跑在树莓派上成为可能

本文插图基于自研架构生成

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 19:30:59 HTTP/2.0 GET : https://f.mffb.com.cn/a/493141.html
  2. 运行时间 : 0.150503s [ 吞吐率:6.64req/s ] 内存消耗:4,630.91kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=31acb28440485b4dca382ac057cbe5fa
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000463s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000630s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000338s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.005256s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000517s ]
  6. SELECT * FROM `set` [ RunTime:0.000246s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000552s ]
  8. SELECT * FROM `article` WHERE `id` = 493141 LIMIT 1 [ RunTime:0.000768s ]
  9. UPDATE `article` SET `lasttime` = 1783078259 WHERE `id` = 493141 [ RunTime:0.014492s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.001989s ]
  11. SELECT * FROM `article` WHERE `id` < 493141 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.002305s ]
  12. SELECT * FROM `article` WHERE `id` > 493141 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.006708s ]
  13. SELECT * FROM `article` WHERE `id` < 493141 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.009058s ]
  14. SELECT * FROM `article` WHERE `id` < 493141 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003792s ]
  15. SELECT * FROM `article` WHERE `id` < 493141 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.015793s ]
0.151997s