Open bf0rce opened 4 years ago
Не является ошибкой. Потребитель - это не реализованный параметр API. (см документацию.) Он всегда будет пустой строкой. А сообщения не приходят из очереди потому что слишком маленький таймаут в методе Клиент.BasicConsumeMessage. Рекомендуется ставить хотя бы 3000 (3 секунды) для маленьких сообщений.
Исправил так, но все равно не получает.
Пока Клиент.BasicConsumeMessage("", ОтветноеСообщение, ТегСообщения, 30000) Цикл
В результате исполнение этой строки занимает 30 секунд и отладчик внутри цикла не останавливается. Подключенного потребителя на стороне RabbitMQ не видно.
Большее значение таймаута нецелесообразно, так как получение того же сообщения через HTTP занимает 69 мс.
Значит в этой очереди нет сообщений, либо коннекта с сервером раббита нет. Нужно в веб-интерефейсе RAbbitMQ посмотреть, чтобы на закладках Connections и channels были активные элементы в момент вызова метода BasicConsumeMessage()
Да, есть там сообщение. Я одно забрал через HTTP (для проверки настроек соединения на форме), а второе компонента не забирает (с теми же настройками, что примечательно). И потребителя подключенного не видно.
Видимо, где-то есть какая-то опция, которая не позволяет компоненте зарегистрировать потребителя, что и ведет к 30 секундному таймауту при вызове метода BasicConsumeMessage().
Если интересно, я могу и обработку целиком прикрепить. Может быть, проблема где-то в другом месте моего кода.
Да, нужна обработка. Желательно, чтобы в ней также программно создавались точки обмена и очереди с нужными свойствами
Обработка и скриншот. RabbitMQ_Console.zip
Версия компоненты 1.8.
Пример выполняемого кода.