有3台机器和一台出版商,两名消费者。 我正在使用golang向某台机器发布订单。 并且该机器使用python作为消费者。 我想知道如何在发布商处获得订单完成或失败的结果。
如果订单不属于机器1,我该怎么办? 释放或埋葬它?
蟒: 消费者:
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)
}
答案 0 :(得分:1)
让发布者了解作业状态的正确方法是使用回调
通过作业让发布者放置回调网址(队列或http),并且在作业成功或失败时,消费者可以向状态回调发送状态消息
所以工作结构可能就像
//JobRequest has the struct storing request name and body
type JobRequest struct {
ID string
RequestBody []byte
CallbackURL *string
}
上述结构的json strng将成为工作主体。消费者将得到CallbackURL
并将senbd状态发送到该网址
尝试解释为重新评估的细节
让我们致电producer
和consumer(s)
master
以及workers(s)
。
当有工作可用时,主人会创建一个job object
其中一名工作人员正在聆听reserve
这份工作的队列,有人说我会尝试
delete
作业从队列和发送状态到CallbackURL delete
作业现在这个对象被转换为json并放入队列
PS:在成功完成之前不要删除作业。完成或永久失败只能删除作业