PinkRabbitMQ icon indicating copy to clipboard operation
PinkRabbitMQ copied to clipboard

Не удается организовать чтение сообщений

Open bf0rce opened this issue 5 years ago • 6 comments

Версия компоненты 1.8.

Пример выполняемого кода.

Потребитель = Клиент.BasicConsume(Параметры.Очередь, "", Истина, Ложь, 0);
// После этого вызова Потребитель = ""
// Второй параметр не влияет на дальнейший результат.

Пока Клиент.BasicConsumeMessage(Потребитель, ОтветноеСообщение, ТегСообщения, 1) Цикл
	// В цикл не заходит.
	ОтветноеСообщение = ""; // Обнуляем, чтобы избежать утечку памяти
	ТегСообщения = 0; // Обнуляем, чтобы избежать утечку памяти
КонецЦикла;

bf0rce avatar Feb 09 '20 17:02 bf0rce

Не является ошибкой. Потребитель - это не реализованный параметр API. (см документацию.) Он всегда будет пустой строкой. А сообщения не приходят из очереди потому что слишком маленький таймаут в методе Клиент.BasicConsumeMessage. Рекомендуется ставить хотя бы 3000 (3 секунды) для маленьких сообщений.

ripreal avatar Feb 09 '20 18:02 ripreal

Исправил так, но все равно не получает.

Пока Клиент.BasicConsumeMessage("", ОтветноеСообщение, ТегСообщения, 30000) Цикл

В результате исполнение этой строки занимает 30 секунд и отладчик внутри цикла не останавливается. Подключенного потребителя на стороне RabbitMQ не видно.

Большее значение таймаута нецелесообразно, так как получение того же сообщения через HTTP занимает 69 мс.

bf0rce avatar Feb 10 '20 08:02 bf0rce

Значит в этой очереди нет сообщений, либо коннекта с сервером раббита нет. Нужно в веб-интерефейсе RAbbitMQ посмотреть, чтобы на закладках Connections и channels были активные элементы в момент вызова метода BasicConsumeMessage()

ripreal avatar Feb 10 '20 15:02 ripreal

Да, есть там сообщение. Я одно забрал через HTTP (для проверки настроек соединения на форме), а второе компонента не забирает (с теми же настройками, что примечательно). И потребителя подключенного не видно. 2020-02-11_12-25-11

Видимо, где-то есть какая-то опция, которая не позволяет компоненте зарегистрировать потребителя, что и ведет к 30 секундному таймауту при вызове метода BasicConsumeMessage().

Если интересно, я могу и обработку целиком прикрепить. Может быть, проблема где-то в другом месте моего кода.

bf0rce avatar Feb 11 '20 09:02 bf0rce

Да, нужна обработка. Желательно, чтобы в ней также программно создавались точки обмена и очереди с нужными свойствами

ripreal avatar Feb 15 '20 07:02 ripreal

Обработка и скриншот. RabbitMQ_Console.zip

2020-02-16_17-16-32

bf0rce avatar Feb 16 '20 17:02 bf0rce