我当前在服务器上设置了几个站点,并且他们都使用beanstalkd进行队列。其中一些站点是登台站点。虽然我知道在另一台服务器上拥有登台网站是理想的选择,但在这种情况下为另一台服务器旋转另一台服务器是没有意义的。
我最近遇到了一个非常令人困惑的问题,我正在部署一个登台站点,其中包括对数据库进行重新介绍。我在某些模型保存上设置了一个观察者设置,这将触发一个要排队的作业,通常最终会发送电子邮件。登台站点实际上没有任何队列工人来运行它们,但是生产站点(在同一服务器上(确实使队列工人运行。
似乎正在发生的事情是登台网站正在生成队列工作,生产站点正在运行那些队列工作!这会导致我的随机用户与电子邮件发送垃圾邮件,因为它将序列化模型,当它未经许可运行该作业时,它实际上与实际的生产用户匹配。
。在运行队列的服务器上有多个站点似乎很普遍,所以我很好奇是否有办法避免此问题。Elasticsearch具有"群集"的概念,因此您可以在一台服务器上运行多个搜索"群集"。我很好奇beanstalkd或redis或任何其他队列提供商具有此功能,因此我们在完全独立的网站之间没有串扰。
谢谢!
beanstalkd具有管的概念:
管是工作队列。
管子的常见用例是具有完全不同的集合 生产者和消费者通过单个Beanstalk实例 因此,给定的消费者将不知道该如何处理所产生的工作 由一些生产者。Producer1可以将工作纳入管1和 消费者1可以完全独立地从那里找到工作 例如,producer2和computer2用tube2所做的。
例如,如果您使用的是pheanstalk,则制作人将致电useTube()
:
$pheanstalk = new Pheanstalk();
$pheanstalk->useTube('foo')->put(...);
,工人将致电watch()
:
$pheanstalk = new Pheanstalk();
$pheanstalk->watch('foo')->ignore('default')->reserve();
这是一个古老的问题,但是您是否尝试过运行多个beanstalkd守护程序?只需绑定到另一个端口。
示例: beanstalkd -p 11301 &
使用 &
叉为背景。