问题标签 [beanstalkd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
http - 使用异步队列连接 http 请求/响应模型
将同步 http 请求/响应模型与基于异步队列的模型连接起来的好方法是什么?
当用户的 HTTP 请求到来时,它会生成一个进入队列的工作请求(在本例中为beanstalkd)。其中一名工作人员接听请求,完成工作并准备响应。
队列模型不是请求/响应——只有请求,没有响应。所以问题是,我们如何最好地将响应返回到 HTTP 世界并返回给用户?
想法:
Beanstalkd 支持轻量级主题或队列(他们称之为管)。我们可以为每个请求创建一个管道,让工作人员在该管道上创建一条消息,并让 http 进程在管道上等待响应。不要特别喜欢这个,因为它有 apache 进程坐在那里占用内存。
让 http 客户端轮询响应。用户的初始 HTTP 请求启动队列中的作业并立即返回。客户端(用户的浏览器)定期轮询响应。在后端,worker 将其响应放入 memcached,我们将 nginx 连接到 memcached,因此轮询是轻量级的。
使用彗星。类似于第二个选项,但使用更高级的 http 通信来避免轮询。
我倾向于 2,因为它很容易而且众所周知(我还没有使用过彗星)。我猜可能还有一个我没有想到的更好的明显模型。你怎么看?
python - Python 2.5 上选择模块的问题
我在 Python 2.5 中有一个应用程序,它监听 beanstalk 队列。它在我迄今为止测试过的所有机器上都能正常工作,除了我新买的 MacBook Pro。
在该计算机上,当我尝试运行它时,出现此错误:
serverconn.py 有以下导入:
当我尝试从命令行运行它时,它也失败了:
您对可能发生的事情有任何想法吗?
PS:尽管我很确定这不是源问题,但如果您需要有关失败的源的一些背景信息,可以在 [ http://pastie.org/399342](this paste)上找到。
更新:因为我得到的第一个答案推测 Mac OS 是否支持 select.poll() ,但我也有一个 iMac 并且具有完全相同的 OS 版本并且它工作正常:
python - 从 python 库调用时,Solaris 上的 BeanStalkd 不返回任何内容
我正在使用 Solaris 10 操作系统(x86)。我安装了 beanstalkd,它通过使用命令“beanstalkd -d -l hostip -p 11300”开始正常。
我的系统上有 Python 2.4.4 我安装了 YAML 和 beanstalkc python 库来连接 beanstalkd 和 python 我的问题是当我尝试编写一些代码时:
导入 beanstalkc beanstalk = beanstalkc.Connection(host='hostip', port=11300)
到目前为止没有错误,但是当我尝试在 beanstalk 上做一些事情时,比如说列出队列。没发生什么事。
豆茎.tubes()
它只是挂起,没有任何回报。如果我取消操作(在 python env 上使用 ctr+c)或停止服务器,我会立即看到输出:
回溯(最后一次调用):文件“”,第 1 行,在?文件“/usr/lib/python2.4/site-packages/beanstalkc-0.1.1-py2.4.egg/beanstalkc.py”,第 134 行,在管中返回 self._interact_yaml('list-tubes\r\n ', ['OK']) 文件“/usr/lib/python2.4/site-packages/beanstalkc-0.1.1-py2.4.egg/beanstalkc.py”,第 83 行,_interact_yaml 大小,= self. _interact(command,expected_ok,expected_err)文件“/usr/lib/python2.4/site-packages/beanstalkc-0.1.1-py2.4.egg/beanstalkc.py”,第57行,在_interact状态,结果=自我._read_response() 文件“/usr/lib/python2.4/site-packages/beanstalkc-0.1.1-py2.4.egg/beanstalkc.py”,第 66 行,在 _read_response response = self.socket_file.readline() .split() 文件“/usr/lib/python2.4/socket.py”,第 332 行,在 readline data = self.
知道怎么回事吗?我是一个 Unix 新手,所以我不知道我做错了什么设置导致这个。
编辑:似乎问题出在 BeanStalkd 本身,有人在 Solaris 10 上使用过这个吗?如果是这样,您使用的是哪个版本?标记为 one 的 v1.3 在 Solaris 上无法编译,而来自 git 代码库的最新版本编译它会导致上述问题(或者在 Solaris 上可能需要进行一些配置?)。
edit2:我使用 beanstalkd、PyYAML、pythonbeanstalc 和 libevent 将相同的组件安装并编译到 UBUNTU 机器上,它工作正常。问题似乎是关于在 solaris 上编译 beanstalkd,我还没有制作或阅读任何解决方案。
python - 从 Python(或任何 UNIX)客户端向 beanstalkd 添加身份验证
所以我喜欢 beanstalkd:小、轻量级、优先处理消息、拥有大量客户端、易于使用。
我不喜欢 beanstalkd 的地方:如果您可以连接到端口,则缺少身份验证,您可以将消息插入其中。
所以我的想法是要么将它防火墙到受信任的系统(这是一个痛苦的维护并且在应用程序外部添加另一层要做的事情)或者使用像stunnel之类的东西将它包装在 TLS/SSL 中(这将产生一个很好的块建立连接和诸如此类的开销)。我确实想过可能会签署作业(作业字符串的MD5或SHA+时间值+附加到作业的秘密),但如果攻击者用虚假作业淹没服务器,我仍然会遇到麻烦。谁能想到任何其他方法来保护 beantalkd 免受攻击者插入虚假消息的影响?尤其是那些在计算或管理上不会产生大量开销的。
php - 检查我的 PHP beanstalkd 后台进程的状态
我有一个用 PHP (CakePHP) 编写的网站,其中某些资源密集型任务由后台进程处理。这是通过 Beanstalkd 消息队列完成的。我需要一些方法来检索该后台进程的状态,以便我可以使用 Monit 对其进行监控。
后台进程是一个与 Beanstalkd 通信的 CakePHP Shell(只是一个 PHP CLI 脚本)。它只是在 Benastalkd 上做一个 reserve() 并等待新消息。当它收到一条消息时,它会处理它。我想要某种方式用Monit监控这个进程,以便在出现问题时重新启动后台进程。
到目前为止,我一直在考虑编写一个 PHP CLI 脚本,该脚本在 Beanstalkd 中删除一条消息。后台进程获取消息并以某种方式将其内部状态传回 CLI 脚本。但是怎么做?插座?共享内存?其他IPC方法?
还是我在这里可能太复杂了,有没有更简单的方法来使用 Monit 监控这样的过程?
提前致谢!
message-queue - 通过 CRON 的消息队列与 DB 表队列
我们即将推出一个大型项目,其中包含大量媒体处理(图像、视频)以及电子邮件输出等,通常我们会将这些内容放入名为“email_queue”的表中,然后使用 cron 运行脚本处理表中的队列。
我已经阅读了很多有关 beanstalkd 等消息队列系统的内容,甚至还进行了设置。它使用起来既简单又好用,问题是我不确定我是否遗漏了一些东西。
有人可以详细说明使用队列系统而不是表和 CRON 的好处吗?因为我真的看不到它们是什么。
谢谢
list - 在 memcached 中,您可以将 List 作为值。你能在 beanstalkd 中列出一个列表吗?
实际上,我想用它来记录。我想将字典放入 beanstalkd。
每次有人进入我的网站时,我都想将字典放入 beanstalkd,然后每天晚上,我都需要一个脚本来获取所有工作并将它们保存在数据库中。
这将使它快速和容易。
perl - beantalkd 的条件工作队列插入?
我正在使用 beanstalkd 的 Perl 客户端。我需要一种简单的方法来避免两次将相同的工作排入队列。
我需要的东西基本上需要等到有 K 个元素,然后将它们组合在一起。为了做到这一点,我有制片人:
和消费者:
这与请求/处理的数量呈线性关系,但在以下情况下:
假设所有这些插入发生在检索作业之前,这将添加 N 个队列项,它会执行以下操作:
有没有更聪明的方法来做到这一点,以便它不会不必要地插入/处理以后的作业请求?
monitoring - beantalkd 的统计/监视器/检查器
有谁知道可以监控 beanstalkd 队列的应用程序?我正在寻找能够显示管道和工作统计数据的东西,并允许您检查详细信息。
我对语言/平台并不是很挑剔,只是想知道在我自己写之前是否有什么东西。