【问题标题】:How to prioritize rabbitmq messages in php?如何在php中优先考虑rabbitmq消息?
【发布时间】:2021-03-18 21:24:15
【问题描述】:

我将RabbitMQ (3.8.3 Erlang 22.3.1) 用于Laravel (6.18.*)。 为此,我正在使用 https://github.com/vyuldashev/laravel-queue-rabbitmq

使用正常的队列和消费者,一切正常。 为了确定消息的优先级,我在队列名称中定义了多个以 0-3 作为后缀的队列。我通过手动计算作业总数将作业路由到不同的队列。

使用这种方法,对于不同的任务,我需要创建更多具有名称优先级的队列。创建队列名称中包含 0-3 的队列似乎不可扩展。

现在我正在尝试为每条消息设置优先级。为此,我尝试在AMQPMessage 中使用priority 属性:

$msg = new AMQPMessage("Hello World!", array(
    'delivery_mode' => 2,
    'priority' => 1,
    'timestamp' => time(),
    'expiration' => strval(1000 * (strtotime('+1 day midnight') - time() - 1))
));

我尝试了多个具有不同优先级的消息,但优先级似乎根本不起作用。

  • 我在队列中设置了x-max-priority
  • 我将 AMQPMessage 的 priority 设置为 1,并从一个终端发送了 100K 消息
  • 同时我用priority 2 发送了另一组10条消息

但消费者似乎没有消费优先级为 2 的消息。

知道我做错了什么吗?请让我知道是否有任何事情可以设置每条消息的优先级,以便消费者首先选择它们。

【问题讨论】:

    标签: php laravel rabbitmq


    【解决方案1】:

    尝试使用 set,像这样:

    $headers = new AMQPTable([
        'x-cache-ttl' => 10 * 60000,
    ]);
    
    $msg = new AMQPMessage($msg);
    $msg->set('application_headers', $headers);
    $msg->set('priority', 2);
    

    别忘了用'x-max-priority'声明队列

    $options = new AMQPTable([
        'x-max-priority' => 3,
    ]);
    
    $connection = new AMQPStreamConnection(RABBIT_HOST, RABBIT_PORT, RABBIT_LOGIN, RABBIT_PASS);
    $channel = $connection->channel();
    $channel->queue_declare('queue_name', false, false, false, false, false, $options);
    
    

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多