2012-06-08 4 views
3

У меня есть простая тестовая программа RabbitMQ, которая отправляет, а затем получает сообщение на сервер RabbitMQ. У меня два компьютера, и я обнаружил, что независимо от того, работает ли мой код, зависит от того, на каком компьютере находится сервер RabbitMQ. Вот моя ситуация (простите мой MS Paint):RabbitMQ: простая тестовая программа имеет возможные проблемы с сетью

enter image description here

  1. Если на компьютере А хостов сервера и запускает код, посылая сообщение от А до А, это работает.
  2. Если компьютер A размещает сервер, а мой код работает на компьютере B, отправляя сообщение от B до A, он работает.
  3. Если на компьютере B находится сервер, а мой код работает на компьютере A, отправляя сообщение от A до B, я получаю исключение, в котором говорится: «Ни одна из указанных конечных точек не была доступна».
  4. Если компьютер B размещает сервер и запускает код, отправляя сообщение от B до B, он работает.

Я не могу понять, почему сценарий № 3 не работает для меня.

  • Я не думаю, что это код, потому что три из моих сценариев работают точно так, как я ожидаю.
  • Я не думаю, что это проблема брандмауэра, потому что я запускал эти тесты с отключенными брандмауэрами на обоих компьютерах.
  • Я не думаю, что это проблема с сервером RabbitMQ на компьютере B, потому что он способен общаться с собой просто отлично (сценарий №4).
  • Я проверил файлы журнала RabbitMQ на компьютере B после попытки сценария №3, но я не вижу ничего, что говорит о попытке подключения. Я думаю, что компьютер A просто не может видеть компьютер B при отправке запросов.

Мой вопрос, как правило, какие вещи я должен искать, что может указывать на мою проблему? Должна быть какая-то настройка, которая проверяется на компьютере A, но не проверяется на компьютере B. В компьютере B установлена ​​установка Erlang и RabbitMQ по умолчанию. Я уверен, что компьютер A также установлен по умолчанию (я не устанавливал его как недавно).

Пожалуйста, помогите.

ответ

2

Проблема только очевидна, когда он пытается соединиться с B, так:

  • Убедитесь, что А может разрешить имя хоста для B к IP-адресу. Используйте для этого nslookup b.
  • Убедитесь, что A может достигнуть B. Запуск ping b будет полезен для этого.
  • Используйте telnet для подключения к порту RabbitMQ от A до B (возможно, 5672): telnet b 5672. Если вы получаете пустой экран, что означает, что соединение было принято. Я уверен, что вы получите какую-то ошибку. Сначала попробуйте этот трюк, используя IP-адрес b, а затем, если это работает, попробуйте его с именем хоста b, чтобы убедиться, что он разрешает.

Подводя итог, просто разделите его на чистые проверки сети (без участия RabbitMQ) и работайте оттуда.

+0

Я изначально неправильно настроил правила брандмауэра. Он работает сейчас. Спасибо за совет. – user1214135

Смежные вопросы