服务内异步解耦
2026/7/14 13:31:31 网站建设 项目流程

场景:

某服务记录日志会较多,但写日志就不能是同步IO写磁盘了

为什么不同步写呢,是因为同步写日志边际成本很高

一般的解决方案是,同步写到内存某个位置,然后不管,由专门的逻辑处理日志。

处理流程:

日志处理方案:

1. 按时间维度存储:10s 写一次

2. 按日志大小维度处理:1m 写一次

技术方案:

import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Service; import java.util.concurrent.LinkedBlockingQueue; @Slf4j @Service public class TestServiceQueue implements InitializingBean { private static final LinkedBlockingQueue<Object> QUEUE = new LinkedBlockingQueue(100); private Thread loggerProducerThread; @Override public void afterPropertiesSet() throws Exception { // 注册消费者 loggerProducerThread = new Thread(new Runnable() { @Override public void run() { try { Object logger = QUEUE.take(); if (logger != null) { // 处理日志 } } catch (InterruptedException e) { log.error("process data error", e); } } }, "logger-record-thread"); loggerProducerThread.start(); } // 生产者 public void produce() { try { // 构建日志对象 QUEUE.put("logger 111 333 222"); } catch (InterruptedException e) { log.error("produce data error", e); } } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询