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

标签 php laravel beanstalkd

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

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

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

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

谢谢!

最佳答案

Beanstalkd 有管​​子的概念:

Tubes are job queues.

A common use case of tubes would be to have completely different sets of producers and consumers running through a single beanstalk instance such that a given consumer will not know what to do with jobs produced by some of the producers. Producer1 can enqueue jobs into Tube1 and Consumer1 can pick up the jobs from there completely independently of what Producer2 and Consumer2 are doing with Tube2, for example.

例如,如果您使用的是 pheanstalk,生产者将调用 useTube():

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

worker 将调用 watch():

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

关于php - 同一 Beanstalkd 队列上的多个站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458649/

相关文章:

php - beanstalkd 怪异,返回无效的工作

Php远程访问Ec2 Mysql服务器

php - Laravel 5 - 错误调用未定义的方法 Illuminate\Events\Dispatcher::fire()

php - 在此服务器上找不到请求的资源

php - Laravel 怎么说,如果线程属于该用户,请允许他

php - 如何处理有错误的 Beanstalkd 作业

javascript - 将表单数据发布到重定向页面

javascript - 如何使用此 JavaScript 在模型和 Controller 中存储数组?

javascript - 在 Laravel mix 中编译和初始化外部 JS 库

python - beanstalkd中如何使用回调?