同一个Beanstalkd队列上的多个站点

问题描述 投票:1回答:2

我目前在服务器上设置了几个站点,他们都使用beanstalkd作为队列。其中一些网站是临时站点。虽然我知道将登台站点放在另一台服务器上是理想的,但在这种情况下启动另一台服务器并不具有经济意义。

我最近遇到了一个非常令人困惑的问题,我正在部署一个临时站点,其中包括重新安装数据库。我在一些模型保存上有一个观察者设置,它将触发一个排队的作业,这通常最终会发送一封电子邮件。暂存站点实际上没有任何队列工作程序设置来运行它们,但生产站点(在同一服务器上)确实有队列工作程序运行。

似乎正在发生的事情是登台站点正在生成队列作业,而生产站点正在运行这些队列作业!这会导致我的随机用户被电子邮件垃圾邮件,因为它会从暂存中序列化模型,当它反序列化运行作业时,它实际上与实际生产用户匹配。

看起来在运行队列的服务器上有多个站点是很常见的,所以我很好奇是否有办法避免这个问题。 Elasticsearch具有“群集”的概念,因此您可以在一台服务器上运行多个搜索“群集”。我很好奇beanstalkd或redis或任何其他队列提供者是否具备此功能,因此我们在完全独立的网站之间没有串扰。

谢谢!

php laravel beanstalkd
2个回答
2
投票

Beanstalkd具有管的概念:

管是工作队列。

管道的一个常见用例是使完全不同的生产者和消费者集合通过单个beanstalk实例运行,这样给定的消费者将不知道如何处理由某些生产者生产的作业。例如,Producer1可以将作业排入Tube1,而Consumer1可以完全独立于Producer2和Consumer2使用Tube2从那里获取作业。

例如,如果你正在使用pheanstalk,那么生产者将调用useTube()

$pheanstalk = new Pheanstalk();
$pheanstalk->useTube('foo')->put(...);

工人将打电话给watch()

$pheanstalk = new Pheanstalk();
$pheanstalk->watch('foo')->ignore('default')->reserve();

0
投票

这是一个老问题,但您是否尝试过运行多个beanstalkd守护进程?只需绑定到另一个端口。

示例:beanstalkd -p 11301 &

使用&分叉到背景中。

© www.soinside.com 2019 - 2024. All rights reserved.