如何在beanstd中使用回调

2024-05-02 22:12:29 发布

您现在位置:Python中文网/ 问答频道 /正文

有3台机器和一个出版商,两个消费者。 我正在使用golang向某台机器发布订单。 该机器使用python作为消费者。 我想知道怎样才能得到订单在publisher中完成或失败的结果。在

如果订单不属于机器一,我该怎么办? 释放还是埋葬?在

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

高朗: 发布:

^{pr2}$

Tags: 订单机器clouddatagetconfjob消费者
1条回答
网友
1楼 · 发布于 2024-05-02 22:12:29

让publisher知道作业状态的正确方法是使用回调

通过job让发布者放置一个回调url(队列或http),当作业成功或失败时,使用者可以向状态回调发送状态消息

因此,工作结构可能隐约可见

//JobRequest has the struct storing request name and body
type JobRequest struct {
        ID              string
        RequestBody     []byte
        CallbackURL  *string
}

上面的结构的json strng将是作业尸体。那个{cdbd>消费者将获得

试图按要求的细节进行解释

让我们调用producerconsumer(s)master和{}。在

  1. 当作业可用时,master将创建一个job object,它具有

    • 作业id(标识作业的唯一值)
    • RequestBody(作业的详细信息)
    • StatusCallbackURL(工人将使用作业状态访问的URL)
  2. 其中一个工人在听队列reserve工作,那里有人告诉我将试着去做这项工作

  3. 解码json并获取作业详细信息。现在开始工作
  4. 成功时delete将队列中的作业发送到CallbackURL
  5. On failure if non-temporary failure发送状态为fail到CallbackURL和delete作业
  6. 如果临时故障在保留超时后不做任何操作,则会重新排队

现在这个对象被转换成json并放入队列中

注意:在成功完成之前不要删除作业。完成或永久失败时,只删除作业

相关问题 更多 >