当前位置: 首页 > 知识库问答 >
问题:

如何在php中优先考虑rabbymq消息?

诸葛利
2023-03-14

我正在使用RabbitMQ(3.8.3 Erlang 22.3.1)forLaravel(6.18.*)。对于这个我正在使用,https://github.com/vyuldashev/laravel-queue-rabbitmq.

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

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

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

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

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

    < li >我在队列上设置了< code>x-max-priority < li >我将amqp消息的< code >优先级设置为1,并从一个终端发送100K消息 < li >同时,我发送了另一组10条消息,优先级为< code> 2

但消费者似乎并不消费优先级为2的消息。

知道我犯了什么错误吗?请告诉我是否有任何东西可以设置每条消息的优先级,以便消费者首先选择它们。

共有1个答案

张智
2023-03-14

尝试使用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);

 类似资料:
  • 我现在是这样做的: > 我有一个在后台运行并读取用户位置的服务。每次读取一个有效的位置(有一些参数,如距离和时间),一个IntentService开始将该位置发送到网络服务器 使用追踪服务的应用程序也有一些网络通话,具体取决于用户按下的选项。现在,应用程序只是在异步任务中调用web服务。 一些代码:位置服务会在每次收到好位置时启动IntentService,如下所示: intentservice处

  • 条款 13:优先考虑const_iterator而非iterator STL const_iterator等价于指向常量的指针。它们都指向不能被修改的值。标准实践是能加上const就加上,这也指示我们对待const_iterator应该如出一辙。 上面的说法对C++11和C++98都是正确的,但是在C++98中,标准库对const_iterator的支持不是很完整。首先不容易创建它们,其次就算你有

  • 条款八:优先考虑nullptr而非0和NULL 你看这样对不对:字面值0是一个int不是指针。 如果C++发现在当前上下文只能使用指针,它会很不情愿的把0解释为指针,但是那是最后的退路。 一般来说C++的解析策略是把0看做int而不是指针。 实际上,NULL也是这样的。但在NULL的实现细节有些不确定因素, 因为实现被允许给NULL一个除了int之外的整型类型(比如long)。 这不常见,但也算不

  • 条款九:优先考虑别名声明而非typedefs 我相信每个人都同意使用STL容器是个好主意,并且我希望Item18能说服你让你觉得使用std:unique_ptr也是个好主意,但我猜没有人喜欢写上几次 std::unique_ptr<std::unordered_map<std::string,std::string>>这样的类型,它可能会让你患上腕管综合征的风险大大增加。 避免上述医疗悲剧也很简单

  • 我正在研究一个简单的tic-tac-toe问题,我正在努力理解Minimax算法是如何工作的。 如果我使用效用函数1表示X win,-1表示O win,0表示正在进行的游戏,那么我不明白算法如何优先考虑较短的解决方案。据我所知,它首先到达最深的节点,如果它不是最短的路径,但它会导致可能的胜利,那么它会选择它。 让我在例子中解释一下。这是电路板的状态和X转角(符号来自https://www.hack

  • 我有一个Spring Boot应用程序,它充当Eureka客户机。该应用程序需要通过REST调用另一个微服务,我希望使用Feign进行此调用。我遇到的问题是,我的应用程序试图在Eureka中查找服务名称,而它仅在我的应用程序yaml文件中定义。 我为难以理解的解释道歉,希望下面的代码片段将有助于澄清。 外国客户: 在我的控制器中,谁调用这个费恩客户端,使用@AutoWired定义了foServic