RabbitMQ: Что означает «прямой» заголовок в разделе `rabbitmqctl list_exchanges`?

#php #javascript #node.js #rabbitmq #amqp

#php #javascript #node.js #rabbitmq #amqp

Вопрос:

Если я создаю exchange в rabbitmq, используя класс amqp php с типом exchange, установленным в direct , и единственным указанным параметром является durable , то попробуйте подключиться к этому exchange в node.js Я получаю Cannot redeclare exchange with different options error вы видите, не совпадают ли ваши параметры.

Однако, насколько я могу судить, я использую точно такие же параметры (тип direct и параметр durable). Итак, я провел тест и создал один обмен на php с именем php_exchange и один на node.js вызвал node_exchange , запустил rabbitmqctl list_exchanges и получил интересный результат:

 Listing exchanges ...
node_exchange   direct
amq.headers headers
amq.direct  direct
amq.match   headers
amq.fanout  fanout
    direct
php_exchange    direct
amq.topic   topic
...done.
  

Что означает direct заголовок в этом контексте (очевидно, что это не все обмены типа direct, поскольку в нем node_exchange указан как имеющий тип direct)? Как я могу получить node.js для создания идентичного обмена amqp (чтобы он не выходил из строя при подключении к долговременному обмену)?

Я использую библиотеку PECL php amqp и библиотеку node-amqp (https://github.com/ry/node-amqp )

Спасибо.

Редактировать:

Вот результат rabbitmqctl list_exchanges name type auto_delete internal arguments (другие обмены удалены для краткости):

 Listing exchanges ...
node_exchange   direct  false   false   []
php_exchange    direct  false   false   []
...done.
  

Ответ №1:

Это не заголовок — это следствие слегка запутанного аспекта AMQP, который заключается в том, что существует прямой обмен, называемый «». Это обмен по «умолчанию», к которому автоматически привязываются все очереди.

Что касается вашей проблемы с PECL против node-amqp, я не использую ни то, ни другое, но, возможно, ваши обмены отличаются чем-то другим, кроме типа или долговечности. «rabbitmqctl list_exchanges name type auto_delete internal arguments» добавит больше столбцов в возвращаемую таблицу, чтобы показать все детали ваших обменов. Или посмотрите на плагин управления.

Комментарии:

1. Спасибо, что ответили на мой вопрос. Я отредактировал оригинал, чтобы включить упомянутую вами команду. Существуют ли другие возможные различия, на которые указал бы плагин управления? Спасибо.