fuCtor / QAMQP

AMQP implementation for Qt
Other
28 stars 3 forks source link

Получение сообщений из очереди #2

Closed and-and-and closed 12 years ago

and-and-and commented 12 years ago

Здравствуйте. Никак не получается получить находящиеся сообщения в очереди вновь подключившемуся клиенту. Пробую примерно такой код (обменник test заранее создали и хотим подключиться), подключаемся, но сообщения не получаем: queue2 = client->createQueue("test-queue1"); queue2->declare(); queue2->bind("test","test"); Если отправлять сообщения после подключения, то они доходят. Не могли бы вы помочь?

fuCtor commented 12 years ago

У вас Management plugin подключен? Перед запуском программы в очереди точно уже есть сообщения? (на всякий случай) Привязка к очереди создается сразуже или в процессе работы?

fuCtor commented 12 years ago

Все, перечитав сообщение понял проблему. Не совсем правильно видать поняли логику работы очередей и обменников. Берем некоторый момент времени, у нас есть обменник и к нему подключены 2 очереди, отправляем сообщение X, оно попадает в обе очереди. Подключается третий приемник, создает новую очередь, и привязывает ее к нашему обменнику. Посылаем сообщение Y, оно попадает уже в три очереди, но сообщение X, новый клиент никак уже получить не может. Если есть необходимость держать очередь в которую будут накапливаться сообщения, то очередь нужно создавать с флагом Durable, таким образом она не будет удалена при отключении (по умолчанию этот флаг не стоит). Сделать это можно так:

queue2_ = client_->createQueue();
queue2_->declare("test-queue1", QAMQP::Queue::Durable);
queue2_->bind("test", "test");
and-and-and commented 12 years ago

Спасибо большое за ответ. Не сразу сообразил, что флаги надо ставить для очереди, а не для обменника. Все заработало :)

fuCtor commented 12 years ago

Обращайтесь =) Рад, что хоть кому-то пригодился написанный код (кроме себя конечно же) =)