beanstalkd中如何使用回调?
how to use callback in beanstalkd ?
有 3 台机器和一个发布者,两个消费者。
我正在使用 golang 向某台机器发布订单。
并且机器使用python作为消费者。
我想知道如何在发布者中得到订单完成或失败的结果。
如果订单不属于机器一,我该怎么办?
释放还是掩埋?
python:
消费者:
import beanstalkc
def get_beanstalk_data(conf):
beanstalk = beanstalkc.Connection(host='127.0.0.1',port=11300)
beanstalk.use('cloud')
beanstalk.watch('cloud')
beanstalk.ignore('default')
job = beanstalk.reserve()
if job.body == "one": #job.body == "two"
#TODO
job.delete()
return job.body
else:
#TODO what should I do in here, because there is two consumer and get different orders
while True:
data = get_beanstalk_data(conf)
print data
戈朗:
发布:
package main
import (
"fmt"
"github.com/kr/beanstalk"
"time"
)
func main() {
c, err := beanstalk.Dial("tcp", "127.0.0.1:11300")
id, err := c.Put([]byte("hello"), 1, 0, 120*time.Second)
if err != nil {
fmt.Println(err)
}
fmt.Println(id)
}
让发布者了解作业状态的正确方法是使用回调
使用作业让发布者放置一个回调url(一个队列或http)并且在作业成功或失败时消费者可以向状态回调发送状态消息
所以工作结构可能会像
//JobRequest has the struct storing request name and body
type JobRequest struct {
ID string
RequestBody []byte
CallbackURL *string
}
上述结构的 json strng 将是工作 body.The 消费者将获得 CallbackURL
并将状态发送到 url
正在按要求详细解释
让我们调用 producer
和 consumer(s)
master
和 workers(s)
。
当有工作可用时,master 会创建一个 job object
,其中有
- 职位编号(识别职位的唯一值)
- RequestBody(作业的详细信息)
- StatusCallbackURL(URL 工作人员会点击工作状态)
其中一名听队列的工人reserve
这份工作,有人告诉我会尝试做这份工作
- 解码 json 并获取作业详细信息。现在执行作业
- 成功时
delete
作业从队列中发送到回调URL
- 如果非临时性失败,则将失败状态发送给回调URL 和
delete
作业
- 如果临时失败什么也不做,因为在保留超时后它将被重新排队
现在这个对象被转换为json并放入队列
PS: 在成功完成之前不要删除作业。在完成或永久失败时只删除作业
有 3 台机器和一个发布者,两个消费者。 我正在使用 golang 向某台机器发布订单。 并且机器使用python作为消费者。 我想知道如何在发布者中得到订单完成或失败的结果。
如果订单不属于机器一,我该怎么办? 释放还是掩埋?
python: 消费者:
import beanstalkc
def get_beanstalk_data(conf):
beanstalk = beanstalkc.Connection(host='127.0.0.1',port=11300)
beanstalk.use('cloud')
beanstalk.watch('cloud')
beanstalk.ignore('default')
job = beanstalk.reserve()
if job.body == "one": #job.body == "two"
#TODO
job.delete()
return job.body
else:
#TODO what should I do in here, because there is two consumer and get different orders
while True:
data = get_beanstalk_data(conf)
print data
戈朗: 发布:
package main
import (
"fmt"
"github.com/kr/beanstalk"
"time"
)
func main() {
c, err := beanstalk.Dial("tcp", "127.0.0.1:11300")
id, err := c.Put([]byte("hello"), 1, 0, 120*time.Second)
if err != nil {
fmt.Println(err)
}
fmt.Println(id)
}
让发布者了解作业状态的正确方法是使用回调
使用作业让发布者放置一个回调url(一个队列或http)并且在作业成功或失败时消费者可以向状态回调发送状态消息
所以工作结构可能会像
//JobRequest has the struct storing request name and body
type JobRequest struct {
ID string
RequestBody []byte
CallbackURL *string
}
上述结构的 json strng 将是工作 body.The 消费者将获得 CallbackURL
并将状态发送到 url
正在按要求详细解释
让我们调用 producer
和 consumer(s)
master
和 workers(s)
。
当有工作可用时,master 会创建一个
job object
,其中有- 职位编号(识别职位的唯一值)
- RequestBody(作业的详细信息)
- StatusCallbackURL(URL 工作人员会点击工作状态)
其中一名听队列的工人
reserve
这份工作,有人告诉我会尝试做这份工作- 解码 json 并获取作业详细信息。现在执行作业
- 成功时
delete
作业从队列中发送到回调URL - 如果非临时性失败,则将失败状态发送给回调URL 和
delete
作业 - 如果临时失败什么也不做,因为在保留超时后它将被重新排队
现在这个对象被转换为json并放入队列
PS: 在成功完成之前不要删除作业。在完成或永久失败时只删除作业