Skip to content

Commit 22371ad

Browse files
committed
获取任务接口, 改为长轮询方式
1 parent 2c5b0fc commit 22371ad

File tree

4 files changed

+23
-10
lines changed

4 files changed

+23
-10
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616

1717
## 运行
18-
`./delay-queue -c delay-queue.conf`, 默认监听 `0.0.0.0:9277`
18+
`./delay-queue -c delay-queue.conf`
1919

2020
## HTTP接口
2121

@@ -56,7 +56,8 @@ URL地址 `/push`
5656
| ttr | int | Job执行超时时间, 单位:秒 | |
5757
| body | string | Job的内容,供消费者做具体的业务处理,如果是json格式需转义 | |
5858

59-
### 获取ready queue中的任务
59+
### 长轮询ready queue是否有任务, 有任务立即返回或等待180秒后超时返回
60+
URL地址 `/pop`
6061
```json
6162
{
6263
"topic": "order"

config/config.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ const (
1717
DefaultRedisHost = "127.0.0.1:6379"
1818
DefaultRedisDb = 1
1919
DefaultRedisPassword = ""
20-
DefaultRedisMaxIdle = 30
20+
DefaultRedisMaxIdle = 10
2121
DefaultRedisMaxActive = 0
2222
DefaultRedisConnectTimeout = 5
23-
DefaultRedisReadTimeout = 1
24-
DefaultRedisWriteTimeout = 1
23+
DefaultRedisReadTimeout = 3
24+
DefaultRedisWriteTimeout = 3
2525
)
2626

2727
type Config struct {

delayqueue/redis.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ func redisTestOnBorrow(conn redis.Conn, t time.Time) error {
6363
return nil
6464
}
6565
_, err := conn.Do("PING")
66+
if err != nil {
67+
log.Printf("从redis连接池取出的连接无效#%s", err.Error())
68+
}
6669

6770
return err
6871
}

routers/routers.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,21 @@ func Pop(resp http.ResponseWriter, req *http.Request) {
7272
resp.Write(generateFailureBody("topic不能为空"))
7373
return
7474
}
75-
job, err := delayqueue.Pop(topic)
76-
if err != nil {
77-
log.Printf("获取job失败#%s", err.Error())
78-
resp.Write(generateFailureBody("获取失败"))
79-
return
75+
76+
// 轮询队列是否有任务, 有任务立即返回或180秒后超时返回
77+
var job *delayqueue.Job = nil
78+
waitTimeout := time.Now().Unix() + 180
79+
for time.Now().Unix() < waitTimeout {
80+
job, err = delayqueue.Pop(topic)
81+
if job != nil && err == nil {
82+
break
83+
}
84+
if err != nil {
85+
log.Printf("获取job失败#%s", err.Error())
86+
}
87+
time.Sleep(1 * time.Second)
8088
}
89+
8190
if job == nil {
8291
resp.Write(generateSuccessBody("操作成功", nil))
8392
return

0 commit comments

Comments
 (0)