有3台机器和1个发布者,两个消费者。我正在使用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
golang:发布:
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将是工作主体,消费者将获得该CallbackURL
URL 的且将senbd状态
试图解释为必要的细节
让我们叫producer
和consumer(s)
master
和workers(s)
。
job object
只要有工作可用,母带就会创建一个
一位在听队列的工人reserve
,有买单告诉我,我会尽力做这份工作
delete
,作业将从队列中发送,并将状态发送到CallbackURLdelete
作业失败现在,此对象转换为json并放入队列中
PS:成功完成之前,请勿删除作业。“完成”或“永久性失败”仅会删除作业
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句