Note that SubscriptionManager::get() will cause a synchronous interaction pattern with the broker where a local queue get() will not. See example below of comparing them
Using SubscriptionManager::get():
#include <qpid/client/Connection.h> #include <qpid/client/Session.h> #include <qpid/client/Message.h> #include <qpid/client/SubscriptionManager.h> #include <qpid/sys/Time.h> #include <unistd.h> #include <cstdlib> #include <iostream> using namespace qpid::client; using namespace qpid::framing; int main(int argc, char** argv) { const char* host = argc>1 ? argv[1] : "127.0.0.1"; int port = argc>2 ? atoi(argv[2]) : 5672; Connection connection; try { connection.open(host, port); Session session = connection.newSession(); SubscriptionManager subs(session); Message m; while (!subs.get(m, "testqueue", 1*qpid::sys::TIME_SEC)) { std::cout << "No message available" << std::endl; } std::cout << "Got: " << m.getData() << std::endl; session.close(); connection.close(); return 0; } catch(const std::exception& error) { std::cout << error.what() << std::endl; } return 1; }
Using a LocalQueue directly:
#include <qpid/client/Connection.h> #include <qpid/client/Session.h> #include <qpid/client/Message.h> #include <qpid/client/SubscriptionManager.h> #include <qpid/sys/Time.h> #include <unistd.h> #include <cstdlib> #include <iostream> using namespace qpid::client; using namespace qpid::framing; int main(int argc, char** argv) { const char* host = argc>1 ? argv[1] : "127.0.0.1"; int port = argc>2 ? atoi(argv[2]) : 5672; Connection connection; try { connection.open(host, port); Session session = connection.newSession(); SubscriptionManager subs(session); LocalQueue incoming; subs.subscribe(incoming, "testqueue"); Message m; while (!incoming.get(m, 1*qpid::sys::TIME_SEC)) { std::cout << "No message available" << std::endl; } std::cout << "Got: " << m.getData() << std::endl; session.close(); connection.close(); return 0; } catch(const std::exception& error) { std::cout << error.what() << std::endl; } return 1; }