【问题标题】:rabbitmq, not able to send message to specific queuerabbitmq,无法将消息发送到特定队列
【发布时间】:2015-10-20 16:24:15
【问题描述】:

我正在尝试将消息传递到交换器,然后再传递到特定队列。

    $conn = new AMQPConnection(RABBITMQ_NODE_IP_ADDRESS, RABBITMQ_PORT, RABBITMQ_USERNAME, RABBITMQ_PASSWORD, RABBITMQ_VHOST);
    $queue = RABBITMQ_QUEUE_CSV;
    $exchange = RABBITMQ_EXCHANGE;
    $ch = $conn->channel();
    $ch->exchange_declare($exchange, 'direct', false, true, false);
    $ch->queue_declare($queue, false, true, false, false);
    $ch->queue_bind($queue, $exchange, $queue);
    $msg = new AMQPMessage(json_encode($params), array('content_type' => 'text/plain', 'delivery_mode' => 2));
    $ch->basic_publish($msg, $exchange);
    $ch->close();
    $conn->close();
    $status = Array("status" => "Job queued");

交换的类型是“直接”,然后我添加了一个名为“foo_bar”的队列,并且作为“路由键”,我使用了相同的“foo_bar”字符串。

仅阅读文档http://www.rabbitmq.com/tutorials/tutorial-four-php.html 我无法理解我做错了什么:(

【问题讨论】:

  • 进入rabbitmq管理界面,点击你想要的exchange,如果没有分配你的queue分配给exchange。您也可以在不干扰交换的情况下正常将消息添加到队列吗?
  • 您好,我已经按照您的建议进行了操作,如果我这样做了,则不会发布任何消息。它默默地失败了
  • 但它仅在您使用交换时发生,或者它也发生在简单的发布到队列中?
  • 我可以发布到任何队列,当我尝试指定路由键时会发生这种情况
  • 我最近在exchange上遇到了类似的问题,但是如果我没记错的话,我进入了manager > exchange,并分配了路由键和队列。看看那个。明天我会在我的办公室检查一下,看看确切的问题和解决方案。一般来说,交换是通过路由键将消息映射到队列,但我也必须通过管理器手动分配它。

标签: php rabbitmq php-amqplib


【解决方案1】:

这里:$ch->queue_bind($queue, $exchange, $queue); 使用 $queue 路由键绑定队列。

在这里:$ch->basic_publish($msg, $exchange); 你发布了一条带有空路由键的消息。对于要到达队列的消息,绑定和消息发布上的路由键必须匹配

【讨论】:

  • 哎呀,明天早上我会调查一下。非常感谢
  • 非常感谢,它当然有效,现在您已经解释了我哪里弄错了,这很有意义。干杯!