如何在beantalkd中使用回调?

haroldT:

有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将是工作主体,消费者将获得该CallbackURLURL 且将senbd状态

试图解释为必要的细节

让我们叫producerconsumer(s) masterworkers(s)

  1. job object只要有工作可用,母带就会创建一个

    • 作业ID(用于标识作业的唯一值)
    • RequestBody(工作的详细信息)
    • StatusCallbackURL(工作人员将使用工作状态命中的URL)
  2. 一位在听队列的工人reserve,有买单告诉我,我会尽力做这份工作

  3. 解码json并获取工作详细信息。
  4. 成功后delete,作业将从队列中发送,并将状态发送到CallbackURL
  5. 如果发生非暂时性失败,则失败时将状态发送为CallbackURL和delete作业失败
  6. 如果临时故障无济于事,则在其超时后将重新入队

现在,此对象转换为json并放入队列中

PS:成功完成之前,请勿删除作业。“完成”或“永久性失败”仅会删除作业

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章