package main
import (
"context"
"fmt"
"log"
"net/http"
"github.com/gin-gonic/gin"
"github.com/hibiken/asynq"
)
// 定义任务类型常量
const (
CheckStatusCodeTaskType = "check:status_code"
CheckStatusCodeTaskType2 = "check:buy_status_code"
)
// 任务处理函数:获取 https://free.iosapp.icu/ 的状态码
func handleCheckStatusCodeTask(ctx context.Context, t *asynq.Task) error {
fmt.Println("1")
return nil
}
func handleCheckStatusCodeTask2(ctx context.Context, t *asynq.Task) error {
fmt.Println("2")
return nil
}
func Client() {
// 初始化 Asynq 客户端和队列
client := asynq.NewClient(asynq.RedisClientOpt{Addr: "localhost:6379"})
defer client.Close()
// 定义任务:检查 https://free.iosapp.icu/ 状态码
task1 := asynq.NewTask(CheckStatusCodeTaskType, nil)
// 将任务添加到队列
_, err := client.Enqueue(task1)
if err != nil {
log.Fatalf("Failed to enqueue task1: %v", err)
}
}
func Client2() {
// 初始化 Asynq 客户端和队列
client := asynq.NewClient(asynq.RedisClientOpt{Addr: "localhost:6379"})
defer client.Close()
// 定义任务:检查 https://free.iosapp.icu/ 状态码
task2 := asynq.NewTask(CheckStatusCodeTaskType2, nil)
// 将任务添加到队列
_, err := client.Enqueue(task2)
if err != nil {
log.Fatalf("Failed to enqueue task1: %v", err)
}
}
func Server() {
mux := asynq.NewServeMux()
mux.HandleFunc(CheckStatusCodeTaskType, handleCheckStatusCodeTask)
mux.HandleFunc(CheckStatusCodeTaskType2, handleCheckStatusCodeTask2)
// 启动工作队列,等待处理任务
server := asynq.NewServer(asynq.RedisClientOpt{Addr: "localhost:6379"}, asynq.Config{Concurrency: 10})
if err := server.Run(mux); err != nil {
log.Fatalf("Error starting server: %v", err)
}
}
func main() {
go Gin()
// 设置任务处理函数和启动任务队列
Server()
}
func Gin() {
// 创建一个默认的 Gin 实例(带 Logger 和 Recovery 中间件)
r := gin.Default()
// 设置一个简单的路由
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
Client()
})
r.GET("/api", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
Client2()
})
// 启动服务器
r.Run(":8080") // 默认监听 8080 端口
}
// 模拟并发数量为一千
最后修改:2024 年 12 月 20 日
© 允许规范转载