php - 如何在php中优先考虑rabbitmq消息?
问题描述
我正在RabbitMQ (3.8.3 Erlang 22.3.1)
使用Laravel (6.18.*)
. 为此,我正在使用https://github.com/vyuldashev/laravel-queue-rabbitmq。
使用正常的队列和消费者,一切正常。为了确定消息的优先级,我在队列名称中定义了多个以 0-3 作为后缀的队列。我通过手动计算总作业将作业路由到不同的队列。
使用这种方法,对于不同的任务,我需要创建更多具有名称优先级的队列。创建队列名称中包含 0-3 的队列似乎不可扩展。
现在我正在尝试为每条消息设置优先级。为此,我尝试将priority
属性AMQPMessage
用作:
$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
排队 - 我将
priority
AMQPMessage 设置为 1 并从一个终端发送了 100K 消息 - 同时我发送了另一组 10 和
priority
2的消息
但是消费者似乎没有消费优先级为 2 的消息。
知道我在做什么错误吗?请让我知道是否有任何东西可以设置每条消息的优先级,以便消费者首先选择它们。
解决方案
尝试使用 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);
推荐阅读
- here-api - 在 PDE(平台数据扩展)中找不到来自路由的 HERE LinkId
- r - httr 调用中的未定义错误。httr 输出:接收失败:连接已重置
- python - 在 Pandas 中出现带有 Multindex 分配的 NaN
- angular - 重复声明变量名
- python - 过滤数据集以仅获取特定类的图像
- ios - iOS Fabric (Crashlytics) 在 RELEASE 构建时显示隐藏和缺失的 dSYMS,但在 DEBUG 构建时有效
- javascript - 在 Angular Bootstrap 的 ngb-tabset 中获取 Select DOM Element 的值
- java - mvn 包忽略 pom.xml 中的存储库
- c# - 在服务器上部署 c# 控制台应用程序而不实际安装 oracle 客户端
- javascript - 是否有兼容 IE11 的解决方法来让 Vue 在 for 循环中为每个项目呈现多个表行?