package main import ( "fmt" "log" "time" "code.tczkiot.com/seqlog" ) func main() { // 创建 Seqlog 实例 mgr := seqlog.NewLogHub("./logs", nil, nil) // 注册 topic handler processedCount := 0 err := mgr.RegisterHandler("app", func(record *seqlog.Record) error { processedCount++ fmt.Printf("处理记录 #%d: %s\n", processedCount, string(record.Data)) time.Sleep(100 * time.Millisecond) // 模拟处理耗时 return nil }) if err != nil { log.Fatal(err) } // 写入一些记录 fmt.Println("=== 写入记录 ===") for i := 0; i < 10; i++ { data := fmt.Sprintf("日志消息 #%d", i) offset, err := mgr.Write("app", []byte(data)) if err != nil { log.Fatal(err) } fmt.Printf("写入: offset=%d, data=%s\n", offset, data) } // 启动处理 fmt.Println("\n=== 启动日志处理 ===") err = mgr.Start() if err != nil { log.Fatal(err) } // 等待一段时间让处理器处理一些记录 time.Sleep(500 * time.Millisecond) // 查询当前处理窗口的记录 fmt.Println("\n=== 查询当前处理窗口记录 ===") records, err := mgr.QueryFromProcessing("app", 5) if err != nil { log.Fatal(err) } fmt.Printf("从处理窗口开始位置查询到 %d 条记录:\n", len(records)) for _, rec := range records { fmt.Printf(" [索引 %d] %s - 状态: %s\n", rec.Index, string(rec.Record.Data), rec.Status) } // 查询更多记录 fmt.Println("\n=== 查询后续记录 ===") moreRecords, err := mgr.QueryFromProcessing("app", 10) if err != nil { log.Fatal(err) } fmt.Printf("查询到 %d 条记录:\n", len(moreRecords)) for _, rec := range moreRecords { fmt.Printf(" [索引 %d] %s - 状态: %s\n", rec.Index, string(rec.Record.Data), rec.Status) } // 清理 mgr.Stop() fmt.Println("\n=== 示例完成 ===") }