PinkRabbitMQ icon indicating copy to clipboard operation
PinkRabbitMQ copied to clipboard

Сообщения удаляются из очереди, хотя делаю BasicReject(ID)

Open aleksandrchernyaev opened this issue 3 years ago • 5 comments

При обработке, все сообщения удаляются из очереди, хотя я их не АSKаю, использую метод BasicReject(ID). После выполнения данного кода, все сообщения удаляются из очереди, хотя необходимо, чтобы они вернулись назад в очередь.

Пример кода:

Клиент  = PinkRabbitMQ_Подключиться();

ИмяОчереди = "q.site.1c.test";


Попытка
	//Клиент.DeclareQueue(ИмяОчереди, Ложь, Истина, Ложь, Ложь);
	Потребитель = Клиент.BasicConsume(ИмяОчереди, "", Ложь, Ложь, 1);
	Сообщение = ""; //Первоначально задаем параметры
	ID = 0;		//Первоначально задаем параметры
	Пока Клиент.BasicConsumeMessage("", Сообщение, ID, 5000) Цикл
		// Начало Обработчика сообщения
		Сообщить("Успешно! Из очереди прочитано сообщение " + Сообщение);
		// Конец Обработчика сообщения
		
		Клиент.BasicReject(ID);
		Сообщение = ""; // Обнуляем, чтобы избежать утечку памяти
		ID = 0; // Обнуляем, чтобы избежать утечку памяти
	КонецЦикла;
	Клиент.BasicCancel("");
Исключение
	Сообщить(Клиент.GetLastError());
КонецПопытки;

aleksandrchernyaev avatar Oct 29 '21 12:10 aleksandrchernyaev

Тоже заметил. При этом если не делать Reject то сообщения остаются.

Magister avatar Nov 12 '21 17:11 Magister

Пробовал не делать Reject, тогда на следующем сообщении В "Пока Клиент.BasicConsumeMessage("", Сообщение, ID, 5000) Цикл" Клиент.BasicConsumeMessage("", Сообщение, ID, 5000) возращает ЛОЖЬ и прекращается обход сообщений.

Т.е. не пробегает по всем сообщениям, как будто они закончились!

aleksandrchernyaev avatar Nov 15 '21 13:11 aleksandrchernyaev

Странно, но у меня работает. Правда использую версию 1.10.

Magister avatar Nov 16 '21 10:11 Magister

image В веб-интерфейсе есть два варианта Reject-а. Насколько я понимаю requeue true возвращает сообщение в очередь, а requeue false удаляет сообщение из очереди. Следовательно в библиотечной функции BasicReject видимо нужно реализовать ещё один параметр, который бы и отвечал за возможность возвращать сообщение в очередь.

rkablukov avatar Aug 16 '22 13:08 rkablukov

image В веб-интерфейсе есть два варианта Reject-а. Насколько я понимаю requeue true возвращает сообщение в очередь, а requeue false удаляет сообщение из очереди. Следовательно в библиотечной функции BasicReject видимо нужно реализовать ещё один параметр, который бы и отвечал за возможность возвращать сообщение в очередь.

Кажется, что эта фича лишняя для компоненты. В 1С обычно из кролика данные сначала грузятся в какой-нибудь регистр сведений (справочник) и тут либо подтвердил либо нет. Сценарий с requeue: true нужен если допустим пятисотит какой-нибудь http/grpc запрос и нужно заново переставить в очередь чтобы повторно обработать. В любом случае интересен ваш сценарий использования.

korableg avatar Aug 17 '22 06:08 korableg