PinkRabbitMQ
PinkRabbitMQ copied to clipboard
Сообщения удаляются из очереди, хотя делаю BasicReject(ID)
При обработке, все сообщения удаляются из очереди, хотя я их не АSKаю, использую метод BasicReject(ID). После выполнения данного кода, все сообщения удаляются из очереди, хотя необходимо, чтобы они вернулись назад в очередь.
Пример кода:
Клиент = PinkRabbitMQ_Подключиться();
ИмяОчереди = "q.site.1c.test";
Попытка
//Клиент.DeclareQueue(ИмяОчереди, Ложь, Истина, Ложь, Ложь);
Потребитель = Клиент.BasicConsume(ИмяОчереди, "", Ложь, Ложь, 1);
Сообщение = ""; //Первоначально задаем параметры
ID = 0; //Первоначально задаем параметры
Пока Клиент.BasicConsumeMessage("", Сообщение, ID, 5000) Цикл
// Начало Обработчика сообщения
Сообщить("Успешно! Из очереди прочитано сообщение " + Сообщение);
// Конец Обработчика сообщения
Клиент.BasicReject(ID);
Сообщение = ""; // Обнуляем, чтобы избежать утечку памяти
ID = 0; // Обнуляем, чтобы избежать утечку памяти
КонецЦикла;
Клиент.BasicCancel("");
Исключение
Сообщить(Клиент.GetLastError());
КонецПопытки;
Тоже заметил. При этом если не делать Reject то сообщения остаются.
Пробовал не делать Reject, тогда на следующем сообщении В "Пока Клиент.BasicConsumeMessage("", Сообщение, ID, 5000) Цикл" Клиент.BasicConsumeMessage("", Сообщение, ID, 5000) возращает ЛОЖЬ и прекращается обход сообщений.
Т.е. не пробегает по всем сообщениям, как будто они закончились!
Странно, но у меня работает. Правда использую версию 1.10.
В веб-интерфейсе есть два варианта Reject-а. Насколько я понимаю requeue true возвращает сообщение в очередь, а requeue false удаляет сообщение из очереди. Следовательно в библиотечной функции BasicReject видимо нужно реализовать ещё один параметр, который бы и отвечал за возможность возвращать сообщение в очередь.
В веб-интерфейсе есть два варианта Reject-а. Насколько я понимаю requeue true возвращает сообщение в очередь, а requeue false удаляет сообщение из очереди. Следовательно в библиотечной функции BasicReject видимо нужно реализовать ещё один параметр, который бы и отвечал за возможность возвращать сообщение в очередь.
Кажется, что эта фича лишняя для компоненты. В 1С обычно из кролика данные сначала грузятся в какой-нибудь регистр сведений (справочник) и тут либо подтвердил либо нет. Сценарий с requeue: true нужен если допустим пятисотит какой-нибудь http/grpc запрос и нужно заново переставить в очередь чтобы повторно обработать. В любом случае интересен ваш сценарий использования.