【问题标题】:RabbitMQ Bundle : One queue & multiple workersRabbitMQ Bundle:一个队列和多个工人
【发布时间】:2014-12-30 00:53:55
【问题描述】:

我目前正在尝试使用 RabbitMQ(具有出色的 RabbitMQBundle )来处理大量异步工作。

目标是让一个队列发布相同类型的消息,并让 X 个工作人员在多台服务器上同时查看消息。

每个工作人员必须查看一条消息,完成工作,然后查看另一条消息等。

这是我的会议:

old_sound_rabbit_mq:
connections:
    default:
        host:     'localhost'
        port:     5672
        user:     'myuser'
        password: 'mypassword'
        vhost:    '/'
        lazy:     false
producers:
    generate_report:
        connection:       default
        exchange_options: { name: 'gen_report', type: fanout }
consumers:
    generate_report:
        connection:       default
        exchange_options: { name: 'gen_report', type: fanout }
        queue_options:    { name: 'gen_report' }
        callback:         generator.report.consumer

在我的消费者中,我在日志文件中有一个条目,并且睡眠时间为 120 秒。

我启动了 php app/console rabbitmq:consumer generate_report 10 次,但是当我查看我的日志文件时,我只有每 120 条消息,而目标是拥有 10 条!

我也尝试将我的队列设置为主题或直接获得相同的结果。

我不明白我做错了什么:'(

提前致谢

亲切的问候

【问题讨论】:

  • 您能否进一步解释问题。我不明白你有什么和你想要什么?
  • 我想让例如 2 个工作人员使用同一个队列同时生成我的报告。目前,当我启动 2 个工人时,只有一个(第一个)在工作。第二个什么都不做,除非我关闭第一个
  • 啊哈,现在我明白了。工人们似乎把对方锁在了门外。你知道他们可以竞争什么样的资源吗?输出文件可以(并且应该)有文件锁,数据库表(对于 MyISAM)和行(对于 InnoDB)有锁。这是第一个工人做的事情,阻止了第二个工人做任何事情
  • Waht 要将预取计数设置为 1 吗?

标签: php symfony rabbitmq amqp


【解决方案1】:

我也遇到过同样的问题。您可以做的是将获取的消息数设置为 1。

$channel->basic_qos(null, 1, null);

http://www.rabbitmq.com/tutorials/tutorial-two-php.html,请参阅公平调度部分。

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2014-06-05
    • 1970-01-01
    相关资源
    最近更新 更多